天天看點

Python|GUI程式設計中元件的布局

在tkinter裡有三種布局管理,分别是pack、grid、和place,這三種方式各有各的好處,需要注意的是這三種布局管理在同一個父容器裡面一定不能混用,在一個父容器裡選擇一種方式便足夠了。

下面依次介紹這三種方式吧:

1.pack

pack是三種布局管理中最常用的,ack布局可以指定相對位置,精确的位置會由pack系統自動完成。這也使得pack布局沒有另外兩種布局方式靈活. 是以 pack 是簡單應用的首選布局。

Pack後面主要可以有這些參數:

fill 控件填充方式

ipadx,ipady設定内部間隙

padx,pady設定外部間隙

side 順次放置控件

先看一下效果

from tkinter import *window = Tk() window.title('pack') window.geometry('380x200') # Label(window,text = '元件1',bg = 'green').pack(fill = Y,side = LEFT) # Label(window,text = '元件2',bg = 'blue').pack(fill = X,side = RIGHT) Label(window,text = '元件2',bg = 'blue').pack() Label(window,text = '元件1',bg = 'green').pack() window.mainloop()
Python|GUI程式設計中元件的布局
Python|GUI程式設計中元件的布局

圖1 預設參數和自己設的參數對比

2.grid

Grid把控件位置作為一個二維表結構來維護,即按照行列的方式排列控件:控件位置由其所在的行号和列号決定. 行号相同而列号不同的幾個控件會被彼此上下排列; 列号相同而行号不同的幾個控件會被彼此左右排列.

使用Grid布局的過程就是為各個控件指定行号和列号的過程. 不需要為每個格子指定大小, Grid 布局會自動設定一個合适的大小。grid的參數row和column為一個整數,這會自動對齊你的元件。

直接通過代碼來看效果吧。

from tkinter import * window = Tk() window.title('grid') window.geometry('380x200') colours = ['red', 'green', 'orange', 'white', 'yellow', 'blue'] r = 0 for c in colours: Label(text=c, relief=RIDGE, width=15).grid(row=r, column=0) Entry(bg=c, relief=SUNKEN, width=10).grid(row=r, column=1) r = r + 1 mainloop()
Python|GUI程式設計中元件的布局

圖2 grid布局

3.place

Place 布局管理可以顯式的指定控件的絕對位置或相對于其他控件的位置. 要使用 Place 布局,調用相應控件的 place() 方法就可以了。所有tkinter 的标準控件都可以調用 place()。

下面是一個使用 Place 布局的例子: 為 Label 控件設定随機的背景色, 然後計算各個 Label 的背景色的亮度(灰階值), 如果其亮度小于 120, 則将其前景色(文字顔色, fg屬性)設定為白色, 否則設為黑色. 這樣做是為了避免使背景色和前景色過于接近而導緻文字不易閱讀。

下面部分是筆者摘取python Tkinter course,筆者将其受用于python2的代碼改了一點使其能在python3環境下運作。

網址:https://www.python-course.eu/tkinter_layout_management.php 大家感興趣可以去深入了解。

import tkinter as tk import randomroot = tk.Tk()root.geometry("300x200")languages = ['Python', 'Perl', 'C++', 'Java', 'Tcl/Tk']labels = range(5) for i in range(5): ct = [random.randrange(256) for x in range(3)] brightness = int(round(0.299 * ct[0] + 0.587 * ct[1] + 0.114 * ct[2])) ct_hex = "%02x%02x%02x" % tuple(ct) bg_colour = '#' + "".join(ct_hex) l = tk.Label(root, text=languages[i], fg='White' if brightness < 120 else 'Black', bg=bg_colour) l.place(x=20, y=30 + i * 30, width=120, height=25)root.mainloop()
Python|GUI程式設計中元件的布局

圖3 place執行個體

寫在最後:

關于一些簡單的布局就介紹到這裡,筆者寫得不是很完善,大家想繼續深入學習可以用谷歌浏覽器進入上面的網址,但是浏覽器翻譯的很多不能了解,筆者就是一邊用有道詞典,一邊敲代碼,求學之路艱辛呀。