中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python Tkinter Pack布局管理器

發布時間:2020-09-24 10:04:10 來源:億速云 閱讀:200 作者:Leah 欄目:編程語言

Python Tkinter Pack布局管理器?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

GUI 編程就相當于小孩子搭積木,每個積木塊應該放在哪里,每個積木塊顯示為多大,也就是對大小和位置都需要進行管理,而布局管理器正是負責管理各組件的大小和位置的。此外,當用戶調整了窗口的大小之后,布局管理器還會自動調整窗口中各組件的大小和位置。

如果使用 Pack 布局,那么當程序向容器中添加組件時,這些組件會依次向后排列,排列方向既可是水平的,也可是垂直的。

下面程序簡單示范了 Pack 布局的用法,該程序向窗口中添加了三個 Label 組件:

# Python 2.x使用這行
#from Tkinter import *
# Python 3.x使用這行
from tkinter import * 

# 創建窗口并設置窗口標題
root = Tk()
# 設置窗口標題
root.title('Pack布局')
for i in range(3):
    lab = Label(root, text="第%d個Label" % (i + 1), bg='#eeeeee')
    # 調用pack進行布局
    lab.pack()
# 啟動主窗口的消息循環
root.mainloop()

上面程序創建了一個窗口,然后使用循環創建了三個 Label,并對這三個 Label 使用了 pack() 方法進行默認的 Pack 布局。運行該程序看到如圖所示的界面:

Python Tkinter Pack布局管理器

上圖圖使用的是默認的 Pack 布局,實際上程序在調用 pack() 方法時可傳入多個選項。例如,通過 help(tkinter.Label.pack) 命令來查看 pack() 方法支持的選項,可以看到如下輸出結果:

>>> help(tkinter.Label.pack)
Help on function pack_configure in module tkinter:

pack_configure(self, cnf={}, **kw)
    Pack a widget in the parent widget. Use as options:
    after=widget - pack it after you have packed widget
    anchor=NSEW (or subset) - position widget according to
                              given direction
    before=widget - pack it before you will pack widget
    expand=bool - expand widget if parent size grows
    fill=NONE or X or Y or BOTH - fill widget if widget grows
    in=master - use master to contain this widget
    in_=master - see 'in' option description
    ipadx=amount - add internal padding in x direction
    ipady=amount - add internal padding in y direction
    padx=amount - add padding in x direction
    pady=amount - add padding in y direction
    side=TOP or BOTTOM or LEFT or RIGHT -  where to add this widget.

從上面的顯示信息可以看出,pack() 方法通常可支持如下選項:

anchor:當可用空間大于組件所需求的大小時,該選項決定組件被放置在容器的何處。該選項支持 N(北,代表上)、E(東,代表右)、S(南,代表下)、W(西,代表左)、NW(西北,代表左上)、NE(東北,代表右上)、SW(西南,代表左下)、SE(東南,代表右下)、CENTER(中,默認值)這些值。

expand:該 bool 值指定當父容器增大時才是否拉伸組件。

fill:設置組件是否沿水平或垂直方向填充。該選項支持 NONE、X、Y、BOTH 四個值,其中 NONE 表示不填充,BOTH 表示沿著兩個方向填充。

ipadx:指定組件在 x 方向(水平)上的內部留白(padding)。

ipady:指定組件在 y 方向(水平)上的內部留白(padding)。

padx:指定組件在 x 方向(水平)上與其他組件的間距。

pady:指定組件在 y 方向(水平)上與其他組件的間距。

side:設置組件的添加位置,可以設置為 TOP、BOTTOM、LEFT 或 RIGHT 這四個值的其中之一。

當程序界面比較復雜時,就需要使用多個容器(Frame)分開布局,然后再將 Frame 添加到窗口中。例如如下程序:

# Python 2.x使用這行
#from Tkinter import *
# Python 3.x使用這行
from tkinter import * 
class App:
    def __init__(self, master):
        self.master = master
        self.initWidgets()
    def initWidgets(self):
        # 創建第一個容器
        fm1 = Frame(self.master)
        # 該容器放在左邊排列
        fm1.pack(side=LEFT, fill=BOTH, expand=YES)
        # 向fm1中添加3個按鈕
        # 設置按鈕從頂部開始排列,且按鈕只能在垂直(X)方向填充
        Button(fm1, text='第一個').pack(side=TOP, fill=X, expand=YES)
        Button(fm1, text='第二個').pack(side=TOP, fill=X, expand=YES)
        Button(fm1, text='第三個').pack(side=TOP,  fill=X, expand=YES)
        # 創建第二個容器
        fm2 = Frame(self.master)
        # 該容器放在左邊排列,就會挨著fm1
        fm2.pack(side=LEFT, padx=10, expand=YES)
        fm2.pack(side=LEFT, padx=10, fill=BOTH, expand=YES)
        # 向fm2中添加3個按鈕
        # 設置按鈕從右邊開始排列
        Button(fm2, text='第一個').pack(side=RIGHT, fill=Y, expand=YES)
        Button(fm2, text='第二個').pack(side=RIGHT, fill=Y, expand=YES)
        Button(fm2, text='第三個').pack(side=RIGHT, fill=Y, expand=YES)       
        # 創建第三個容器
        fm3 = Frame(self.master)
        # 該容器放在右邊排列,就會挨著fm1
        fm3.pack(side=RIGHT, padx=10, fill=BOTH, expand=YES)
        # 向fm3中添加3個按鈕
        # 設置按鈕從底部開始排列,且按鈕只能在垂直(Y)方向填充
        Button(fm3, text='第一個').pack(side=BOTTOM, fill=Y, expand=YES)
        Button(fm3, text='第二個').pack(side=BOTTOM, fill=Y, expand=YES)
        Button(fm3, text='第三個').pack(side=BOTTOM, fill=Y, expand=YES)
root = Tk()
root.title("Pack布局")
display = App(root)
root.mainloop()

上面程序創建了三個 Frame 容器,其中第一個 Frame 容器內包含三個從頂部(TOP)開始排列的按鈕,這意味著這三個按鈕會從上到下依次排列,且這三個按鈕能在水平(X)方向上填充;第二個 Frame 容器內包含三個從右邊(RIGHT)開始排列的按鈕,這意味著這三個按鈕會從右向左依次排列;第三個 Frame 容器內包含三個從底部(BOTTOM)開始排列的按鈕,這意味著這三個按鈕會從下到上依次排列,且這三個按鈕能在垂直(Y)方向上填充。

運行上面程序,將看到如下圖所示的界面。

Python Tkinter Pack布局管理器

從上圖中可以看到,為運行效果添加了三個框,分別代表 fm1、fm2、fm3(實際上容器是看不到的),此時可以看到 fm1 內的三個按鈕從上到下排列,并且可以在水平方向上填充;fm3 內的三個按鈕從下到上排列,并且可以在垂直方向上填充。

可能有讀者會有疑問,fm2 內的三個按鈕也都設置了 fill=Y,expand=YES,這說明它們也能在垂直方向上填充,為啥舍看不到呢?仔細看 fm2.pack(side=LEFT, padx=10, expand= YES)這行代碼,它說明 fm2 本身不在任何方向上填充,因此 fm2 內的三個按鈕都不能填充。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延庆县| 鄂州市| 商都县| 北票市| 甘孜县| 霸州市| 吉安县| 鄂托克前旗| 隆德县| 辉县市| 梅州市| 安徽省| 大厂| 南昌市| 禄劝| 无棣县| 金堂县| 灵武市| 崇礼县| 厦门市| 会泽县| 平安县| 砚山县| 比如县| 乐山市| 礼泉县| 兴安县| 舞阳县| 天台县| 土默特右旗| 乌苏市| 迭部县| 九龙坡区| 祁东县| 郓城县| 樟树市| 桦川县| 扬中市| 瑞金市| 乌鲁木齐市| 若尔盖县|