Python:GUI之tkinter學習筆記2界面布局顯示



相關內容:

  • pack
    • 介紹
    • 常用參數
    • 使用情況
    • 常用函數
  • grid
    • 介紹
    • 常用參數
    • 使用情況
    • 常用函數
  • place
    • 介紹
    • 常用參數
    • 使用情況
    • 常用函數

 

首發時間:2018-03-04 14:20


pack:

    • 介紹:
      • pack幾何管理器按行或列打包小部件。 可以使用填充fill,展開expand和靠邊side等選項來控制此幾何體管理器。
      • pack的排放控件的形式就像將一個個控件按大小從上到下放過去
      • 在窗口不設定大小的而使用pack進行布局的情況下,窗口默認大小為剛好包裹所有控件的大小
      • 默認情況下添加的控件是居中且占據整行的
    • 常用參數:
      • fill:填充分配給控件的空間,fill:X為填充X軸方向,Y為Y軸方向,BOTH為X+Y
      • expand:先按普通標准來規定控件大小,如果后面窗口還剩下空間,那么會分給那些expand=True的控件,如圖中是兩個不同大小的按鈕,其中2expand=Trueimage_thumb[4] ,當使用expand=True時,side將不會生效!
      • side:使控件靠窗口的指定方向並排,side可取值LEFT,RIGHT,TOP,BOTTOM.image_thumb3[1]
      • anchor:對齊方式,可取值“n”, “s”, “w”, “e”, “nw”, “sw”, “se”, “ne”, “center”(默認為” center”)image_thumb[5]
      • ipadx, ipady:內邊距
      • padx,pady:外邊距
    • 適用情況:與gird相比,pack有一定的局限性,但在一些但很常見的情況下使用起來要容易得多:
      • 將一個小部件放入一個框架(或任何其他容器小部件)中,並讓它填充整個框架
      • 將多個小部件放在一起
      • 並排放置一些小部件
    • 補充:
      • 常用函數:
        • pack_propagate(flag):由窗口調用來配置pack控件時窗口的大小,當flag=0時,那么窗口大小將不再僅僅包裹住所有控件,這時候窗口的高度和寬度設置才可以生效
        • pack_forget():移除控件,但並沒有進行摧毀,可以再次使用pack或其他方式來顯示
        • pack_info():返回pack提供的選項所對應得值。
        • pack_slaves():以列表方式返回本組件的所有子組件對象。
from tkinter import *
root=Tk()

# for i in range(10):
    ##side
    # btn = Button(text=i)
    # btn.pack(side=LEFT)
    # btn.pack(side=RIGHT)
    # btn.pack(side=(TOP,LEFT))

    ####fill
    # btn.pack(fill=X)
    # btn.pack(side=LEFT,fill=Y)
    # btn.pack(fill=BOTH)

##expand
# btn1=Button(text=1,bg='green')
# btn2=Button(text=2,bg='yellow')
# btn1.pack(fill=X)
# btn2.pack(expand=True)
#anchor:
# btn1=Button(text=1,bg='green')
# btn2=Button(text=2,bg='yellow')
# btn1.pack(fill=X)
# btn2.pack(anchor=E)

#pack_propagete
# btn1=Button(text=1,bg='green')
# btn2=Button(text=2,bg='yellow')
# root.pack_propagate(0)
# btn1.pack()
# btn2.pack()

#pack_forget:
# import time,threading
# label=Label(text="警告!")
# label.pack()
# def run():
#     start_time=time.time()
#     while True:
#         if time.time()-start_time>3:
#             label.pack_forget()
#             break
# t=threading.Thread(target=run)
# t.setDaemon(True)
# t.start()

root.mainloop()

 


grid:

    • 介紹:grid是格子的意思,grid可以將控件區塊式擺放.image_thumb4
    • 常用參數:
      • row: 行號,區分不同控件是否處於同一行
      • column: 列號,區分不同控件是否處於同一列
      • sticky: 決定控件的貼靠方向,該選項從集合N,S,E,W [東南西北的意思],中取一個或多個值。比如要將標簽與左邊框對齊,可以使用W(西)image_thumb[1]image_thumb[2]
      • rowspan:行跨度,決定某個控件占的行數 ,默認一行
      • columnspan:列跨度,決定某個控件占的列數,默認一列
      • ipadx, ipady:內邊距
      • padx,pady:外邊距
      • 適用情況:
        • 設計對話框的時候特別方便
        • 區塊化擺放的時候
      • 補充:
        • 常用函數:
          • grid_forget :移除控件,但並沒有進行摧毀,可以再次使用grid或其他方式來顯示 [grid_remove有同樣作用]
          • grid_propagete:由窗口調用來配置pack控件時窗口的大小,當flag=0時,那么窗口大小將不再僅僅包裹住所有控件,這時候窗口的高度和寬度設置才可以生效

          • grid_slaves():以列表方式返回本組件的所有子組件對象。

    from tkinter import *
    
    root=Tk()
    root.title("我的窗口")
    label_user=Label(text='用戶名:',bg='green')
    label_pwd=Label(text='密碼:',bg='green')
    user=Entry()
    pwd=Entry()
    # row,column,sticky
    label_user.grid(row=0,column=0,sticky=W) #一個有sticky,一個沒有sticky,以作區分
    label_pwd.grid(row=1,column=0)
    # rowspan,columnspan
    user.grid(row=0,column=1)
    pwd.grid(row=1,column=1)
    btn=Button(text="提交")
    btn.grid(row=0,column=3,rowspan=2,columnspan=2,padx=5, pady=5)
    # 下面主要是將第一列拉大來顯示上面sticky的效果
    v=IntVar()
    check=Checkbutton(text="下次自動登錄",variable=v,)
    check.grid(row=2,column=0,sticky=W)
    
    
    # _forget:
    import time,threading
    label=Label(text="歡迎登錄!",bg='blue')
    label.grid()
    def run():
        start_time=time.time()
        while True:
            if time.time()-start_time>3:
                label.grid_forget()
                break
    t=threading.Thread(target=run)
    t.setDaemon(True)
    t.start()
    
    
    
    root.mainloop()

     

     


    place:

      • 介紹:可以使用絕對的位置或相對位置來擺放控件。 conn_thumb conn2[3]_thumb
      • 常用參數:
        • x:控件在窗口中的x坐標
        • y:控件在窗口中的y坐標conn2_thumb
        • relx,rely:與主窗口的相對位置,比如image_thumb[3]
        • relwidth,relheight:相對大小,比如height=0.5,width=0.5時控件占據窗口的四分之一大小
      • 適用情況:
        • 自定義顯示方式
        • 將按鈕定位在對話框中
      • 補充:
        • 常用函數:
          • place_forget():移除控件,但並沒有進行摧毀,可以再次使用place或其他方式來顯示
          • place_slaves():以列表方式返回本組件的所有子組件對象。[slaves()具有同樣功能]
          • place_info():返回place提供的選項所對應得值。
    from tkinter import *
    
    root=Tk()
    root.geometry('100x100')
    label=Label(text="用戶名:",bg='green')
    entry=Entry()
    label.pack(fill=X)
    #x,y
    # entry.place(x=0,y=0)
    
    #relx,rely
    # entry.place(relx=0.3, rely=0.3)
    # entry.place(relx=0.5, rely=0.5)
    
    #relheight,relwidth
    # entry.place(relx=0.5, rely=0.5,relheight=0.5,relwidth=0.5)
    
    #_forget:
    import time,threading
    label2=Label(text="警告!",bg='blue')
    label2.place(relx=0.2,rely=0.2)
    def run():
        start_time=time.time()
        while True:
            if time.time()-start_time>3:
                label2.place_forget()
                break
    t=threading.Thread(target=run)
    t.setDaemon(True)
    t.start()
    
    root.mainloop()

     

     

    想要了解更多,可以參考tkinter的官方文檔:http://effbot.org/tkinterbook/

     

     



    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM