Python GUI之tkinter布局管理教程
所謂布局,就是指控制窗體容器中各個控件(組件)的位置關系。
tkinter 共有三種幾何布局管理器,分別是:
- pack布局
- grid布局
- place布局
pack布局
使用 pack布局,將向容器中添加組件,第一個添加的組件在最上方,然后是依次向下添加。
from tkinter import * root = Tk() #創(chuàng)建三個 Label 分別添加到root窗體中 #Label是一種用來顯示文字或者圖片的組件 Label(root,text = 'pack1',bg = 'red').pack() Label(root, text = 'pack2', bg = 'blue').pack() Label(root, text = 'pack3', bg = 'green').pack() root.mainloop()
如圖:
pack常用屬性
屬性名 | 屬性簡析 | 取值 | 取值說明 |
fill | 設置組件是否向水平或垂直方向填充 | X、Y、BOTH 和NONE | fill = X(水平方向填充)fill = Y(垂直方向填充)fill = BOTH(水平和垂直)NONE 不填充 |
expand | 設置組件是否展開,當值為YES時,side選項無效。組件顯示在父容器中心位置;若fill選項為BOTH,則填充父組件的剩余空間。默認為不展開 | YES 、NO(1、0) | expand=YES expand=NO |
side | 設置組件的對齊方式 | LEFT、TOP、RIGHT、BOTTOM | 值為左、上、右、下 |
ipadx、ipady | 設置x方向(或者y方向)內部間隙(子組件之間的間隔) | 可設置數(shù)值,默認是0 | 非負整數(shù),單位為像素 |
padx、pady | 設置x方向(或者y方向)外部間隙(與之并列的組件之間的間隔) | 可設置數(shù)值,默認是0 | 非負整數(shù),單位為像素 |
anchor | 錨選項,當可用空間大于所需求的尺寸時,決定組件被放置于容器的何處 | N、E、S、W、NW、NE、SW、SE、CENTER(默認值為CENTER) | 表示八個方向以及中心 |
注意:上表中取值都是常量,YES等價于"yes",亦可以直接傳入字符串值。另外當界面復雜度增加時,要實現(xiàn)某種布局效果,需要分層來實現(xiàn)。
from tkinter import * #注意模塊導入方式,否則代碼會有差別 class App: def __init__(self, master): #使用Frame增加一層容器 fm1 = Frame(master) #Button是一種按鈕組件,與Label類似,只是多出了響應點擊的功能 Button(fm1, text='Top').pack(side=TOP, anchor=W, fill=X, expand=YES) Button(fm1, text='Center').pack(side=TOP, anchor=W, fill=X, expand=YES) Button(fm1, text='Bottom').pack(side=TOP, anchor=W, fill=X, expand=YES) fm1.pack(side=LEFT, fill=BOTH, expand=YES) fm2 = Frame(master) Button(fm2, text='Left').pack(side=LEFT) Button(fm2, text='This is the Center button').pack(side=LEFT) Button(fm2, text='Right').pack(side=LEFT) fm2.pack(side=LEFT, padx=10) root = Tk() root.title("Pack - Example") display = App(root) root.mainloop()
如上,創(chuàng)建一個Frame容器fm1,將三個垂直排列的Button組件使用pack布局放入fm1容器中,然后創(chuàng)建fm2容器,同樣將三個水平排列的Button組件放入,最后將兩個Frame容器當做組件,使用pack布局放入根窗體容器中。
如此分層布局,實現(xiàn)了相對復雜一些的界面需求。
pack類提供了下列函數(shù)(使用組件實例對象調用)
函數(shù)名 | 描述 |
pack_slaves() | 以列表方式返回本組件的所有子組件對象。 |
pack_configure(option=value) | 給pack布局管理器設置屬性,使用屬性(option)= 取值(value)方式設置 |
propagate(boolean) | 設置為True表示父組件的幾何大小由子組件決定(默認值),反之則無關。 |
pack_info() | 返回pack提供的選項所對應得值。 |
pack_forget() | Unpack組件,將組件隱藏并且忽略原有設置,對象依舊存在,可以用pack(option, …),將其顯示。 |
location(x, y) | x, y為以像素為單位的點,函數(shù)返回此點是否在單元格中,在哪個單元格中。返回單元格行列坐標,(-1, -1)表示不在其中 |
size() | 返回組件所包含的單元格,揭示組件大小。 |
grid布局
grid布局又被稱作網(wǎng)格布局,是最被推薦使用的布局。程序大多數(shù)都是矩形的界面,我們可以很容易把它劃分為一個幾行幾列的網(wǎng)格,然后根據(jù)行號和列號,將組件放置于網(wǎng)格之中。使用grid 布局時,需要在里面指定兩個參數(shù),分別用row 表示行,column 表示列。需要注意的是 row 和 column 的序號都從0 開始。
如下圖,假設將界面分成網(wǎng)格。
grid屬性設置
屬性名 | 屬性簡析 | 取值 | 取值說明 |
row、column | row為行號,column為列號,設置將組件放置于第幾行第幾列 | 取值為行、列的序號,不是行數(shù)與列數(shù) | row 和 column 的序號從0開始,但是,column的默認值是0,row的默認值是下一個編號較大的未占用行號 |
sticky | 設置組件在網(wǎng)格中的對齊方式(前提是有額外的空間) | N、E、S、W、NW、NE、SW、SE | 類似于pack布局中的錨選項 |
rowspan | 組件所跨越的行數(shù) | 默認值為1 | 取值為跨越占用的行數(shù),而不是序號 |
columnspan | 組件所跨越的列數(shù) | 默認值為1 | 取值為跨越占用的列數(shù),而不是序號 |
ipadx、ipady、padx、pady | 組件的內部、外部間隔距離,與pack的該屬性用法相同 | 同pack | 同pack |
grid類提供了下列函數(shù)(使用組件實例對象調用)
函數(shù)名 | 描述 |
grid_slaves() | 以列表方式返回本組件的所有子組件對象。 |
grid_configure(option=value) | 給pack布局管理器設置屬性,使用屬性(option)= 取值(value)方式設置 |
grid_propagate(boolean) | 設置為True表示父組件的幾何大小由子組件決定(默認值),反之則無關。 |
grid_info() | 返回pack提供的選項所對應得值。 |
grid_forget() | Unpack組件,將組件隱藏并且忽略原有設置,對象依舊存在,可以用pack(option, …),將其顯示。 |
grid_location(x, y) | x, y為以像素為單位的點,函數(shù)返回此點是否在單元格中,在哪個單元格中。返回單元格行列坐標,(-1, -1)表示不在其中 |
size() | 返回組件所包含的單元格,揭示組件大小。 |
place布局。
最簡單最靈活的一種布局,使用組件坐標來放置組件的位置。但是不太推薦使用,在不同分辨率下,界面往往有較大差異。
place屬性設置
屬性名 | 屬性簡析 | 取值 | 取值說明 |
anchor | 錨選項,同pack布局 | 默認值為 NW | 同pack布局 |
x、y | 組件左上角的x、y坐標 | 整數(shù),默認值0 | 絕對位置坐標,單位像素 |
relx、rely | 組件相對于父容器的x、y坐標 | 0~1之間浮點數(shù) | 相對位置,0.0表示左邊緣(或上邊緣),1.0表示右邊緣(或下邊緣) |
width、height | 組件的寬度、高度 | 非負整數(shù) | 單位像素 |
relwidth、relheight | 組件相對于父容器的寬度、高度 | 0~1之間浮點數(shù) | 與relx(rely)取值相似 |
bordermode 如果設置為INSIDE,組件內部的大小和位置是相對的,不包括邊框;如果是OUTSIDE,組件的外部大小是相對的,包括邊框 INSIDE、OUTSIDE(默認值INSIDE) 可以使用常量INSIDE、OUTSIDE,也可以使用字符串形式"inside"、"outside"
place類提供了下列函數(shù)(使用組件實例對象調用)
函數(shù)名 | 描述 |
place_slaves() | 以列表方式返回本組件的所有子組件對象。 |
place_configure(option=value) | 給pack布局管理器設置屬性,使用屬性(option)= 取值(value)方式設置 |
propagate(boolean) | 設置為True表示父組件的幾何大小由子組件決定(默認值),反之則無關。 |
place_info() | 返回pack提供的選項所對應得值。 |
grid_forget() | Unpack組件,將組件隱藏并且忽略原有設置,對象依舊存在,可以用pack(option, …),將其顯示。 |
location(x, y) | x, y為以像素為單位的點,函數(shù)返回此點是否在單元格中,在哪個單元格中。返回單元格行列坐標,(-1, -1)表示不在其中 |
size() | 返回組件所包含的單元格,揭示組件大小。 |
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python實現(xiàn)解析參數(shù)的三種方法詳解
這篇文章主要介紹了python解析參數(shù)的三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2022-07-07Python實現(xiàn)MySql數(shù)據(jù)庫交互的示例
本文主要介紹了Python實現(xiàn)MySql數(shù)據(jù)庫交互的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01Python統(tǒng)計字符串中英文字母、空格、數(shù)字和其它字符的個數(shù)
這篇文章主要給大家介紹了關于Python統(tǒng)計字符串中英文字母、空格、數(shù)字和其它字符的個數(shù)的相關資料,本文實例講述了python統(tǒng)計字符串中指定字符出現(xiàn)次數(shù)的方法,需要的朋友可以參考下2023-06-06python-opencv-cv2.threshold()二值化函數(shù)的使用
這篇文章主要介紹了python-opencv-cv2.threshold()二值化函數(shù)的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11pandas 中對特征進行硬編碼和onehot編碼的實現(xiàn)
今天小編就為大家分享一篇pandas 中對特征進行硬編碼和onehot編碼的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python編程實現(xiàn)的簡單神經(jīng)網(wǎng)絡算法示例
這篇文章主要介紹了Python編程實現(xiàn)的簡單神經(jīng)網(wǎng)絡算法,結合實例形式分析了神經(jīng)網(wǎng)絡算法的原理及Python相關算法實現(xiàn)技巧,需要的朋友可以參考下2018-01-01