Tkinter之部件3種放置方式pack、grid、place


import Tkinter as tk 
window = tk.Tk()
window.title('My Window')
window.geometry('500x300')  
 
#pack
#常用的pack(), 多數按照上和西的方式排列,不指定時默認為上。
tk.Label(window,text='123nihao你好',fg='red').pack(side='top')       # 上
tk.Label(window,text='123nihao你好',fg='red').pack(side='bottom') # 下
tk.Label(window,text='123nihao你好',fg='red').pack(side='left')      # 左
tk.Label(window,text='123nihao你好',fg='red').pack(side='right')   # 右
 
tk.Label(window,text='123nihao你好',fg='red').pack(anchor='n')    # 北,效果同上
tk.Label(window,text='123nihao你好',fg='red').pack(anchor='s')    # 南,效果同上
tk.Label(window,text='123nihao你好',fg='red').pack(anchor='w')  # 西
tk.Label(window,text='123nihao你好',fg='red').pack(anchor='e')   # 東
 
可以體會下這兩種的不同表現:
for i in range(3):
    tk.Radiobutton(window, text=i).pack(anchor='w')  #按行追加,前三行依次靠西生成3個按鈕
 
for i in range(3):
    tk.Radiobutton(window, text=i).pack(side='left')   #同一行追加,中間一行依次靠上一按鈕生成3個按鈕
 
#grid
#以規律的方格形式呈現。比如下面的代碼就是創建一個三行三列的表格:參數row 為行,colum 為列,padx 單元格左右間距,pady單元格上下間距,ipadx單元格內部元素與單元格的左右間距,ipady單元格內部元素與單元格的上下間距。
for i in range(3):
    for j in range(3):
      l=tk.Label(window,text='123nihao你好',bg='yellow',font=('Arial', 12), width=10, height=2)
       l.grid(row=i, column=j, padx=5, pady=10, ipadx=1, ipady=20)
     
#place
#用精確的坐標來定位,參數anchor='nw'表示錨定點是西北角。
tk.Label(window, text='Pl', font=('Arial', 20), ).place(x=20, y=100, anchor='nw')
tk.Label(window, text='Pl', font=('Arial', 20), ).place(x=20, y=200, anchor='nw')
tk.Label(window, text='Pl', font=('Arial', 20), ).place(x=80, y=100, anchor='nw')
tk.Label(window, text='Pl', font=('Arial', 20), ).place(x=80, y=200, anchor='nw')
       
window.mainloop()
 
 
 
注意
3種方式不要混在一起同時執行,會導致程序卡掉,暫不清楚原因。
 
3種方式都支持兩行並一行:
w=tk.Label(window,text='123mn你好',fg='red')
w.pack(side='top')
等於:
tk.Label(window,text='123mn你好',fg='red').pack(side='top')
 
但是:
tk.Label(window,text='123mn你好',fg='red').pack(side='top')       # 上
tk.Label(window,text='123mn你好',fg='red').pack(side='bottom') # 下
會表示為2個Label部件。
 
w=tk.Label(window,text='123mn你好',fg='red')
w.pack(side='top')
w.pack(side='bottom')
卻只表示1個Label部件,只取最后的bottom。
 
w=tk.Label(window,text='123mn你好',fg='red')
w.pack(side='top')
w=tk.Label(window,text='123mn你好',fg='red')
w.pack(side='bottom')
這樣寫就能表示2個Label部件。
 
綜合來看,多個部件時還是一行的寫法更方便。
 
 
 


免責聲明!

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



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