Python-Tkinter 組件之Grid

Grid

grid 管理器可以說是 Tkinter 這三個布局管理器中最靈活多變的叹括。如果你只希望學(xué)習(xí)使用一個布局管理器,那么 grid 絕對是首選宵荒。當你在設(shè)計對話框的時候领猾,使用 gird 尤其便捷。如果你此前一直在用 pack 構(gòu)造窗口布局骇扇,那么學(xué)習(xí)完 grid 你會悔恨當初為啥不早學(xué)它摔竿。使用一個 grid 就可以簡單的實現(xiàn)你用很多個框架和 pack 搭建起來的效果。
注意:不要在同一個父組件中混合使用 pack 和 grid少孝,因為 Tkinter 會很認真地在那兒計算到底先使用那個布局管理器......以至于你等了半個小時继低,Tkinter 還在那兒糾結(jié)不出結(jié)果!

代碼

使用 grid 排列組件稍走,只需告訴它你想要將組件放置的位置(行/列袁翁,row 選項指定行,cloumn 選項指定列)婿脸。此外粱胜,你并不用提前指出網(wǎng)格(grid 分布給組件的位置稱為網(wǎng)格)的尺寸,因為管理器會自動計算狐树。

import tkinter as tk
 
root = tk.Tk()
 
# column 默認值是 0
tk.Label(root, text="用戶名").grid(row=0)
tk.Label(root, text="密碼").grid(row=1)
 
tk.Entry(root).grid(row=0, column=1)
tk.Entry(root, show="*").grid(row=1, column=1)
 
root.mainloop()

默認情況下組件會居中顯示在對應(yīng)的網(wǎng)格里焙压,你可以使用 sticky 選項來修改這一特性。該選項可以使用的值有 "e","w"涯曲,"s"野哭,"n"(ewsn 分別表示東西南北,即上北下南左西右東)以及它們的組合幻件。因此拨黔,我們可以通過 sticky = "w" 使得 Label 左對齊:

tk.Label(root, text="用戶名").grid(row=0, sticky="w")
tk.Label(root, text="密碼").grid(row=1, sticky="w")

有時候你可能需要用幾個網(wǎng)格來放置一個組件,只需要指定 rowspan 和 columnspan 就可以實現(xiàn)跨行和跨列的功能:

import tkinter as tk
 
root = tk.Tk()
 
# column 默認值是 0
tk.Label(root, text="用戶名").grid(row=0, sticky="w")
tk.Label(root, text="密碼").grid(row=1, sticky="w")
 
tk.Entry(root).grid(row=0, column=1)
tk.Entry(root, show="*").grid(row=1, column=1)
 
photo = tk.PhotoImage(file="logo.gif")
tk.Label(root, image=photo).grid(row=0, column=2, rowspan=2, padx=5, pady=5) #rowspan=2 跨兩行
 
tk.Button(text="提交", width=10).grid(row=2, columnspan=3, pady=5) #columnspan=3 跨三列
 
root.mainloop()

方法

注:下邊所有方法適用于所有組件

grid(**options)
-- 下方表格詳細列舉了各個選項的具體含義和用法:

選項 含義
column 1. 指定組件插入的列(0 表示第 1 列)
2. 默認值是 0
columnspan 指定用多少列(跨列)顯示該組件
in_ 1. 將該組件放到該選項指定的組件中
2. 指定的組件必須是該組件的父組件
ipadx 指定水平方向上的內(nèi)邊距
ipady 指定垂直方向上的內(nèi)邊距
padx 指定水平方向上的外邊距
pady 指定垂直方向上的外邊距
row 指定組件插入的行(0 表示第 1 行)
rowspan 指定用多少行(跨行)顯示該組件
sticky 1. 控制組件在 grid 分配的空間中的位置
2. 可以使用 "n", "e", "s", "w" 以及它們的組合來定位(ewsn代表東西南北,上北下南左西右東)
3. 使用加號(+)表示拉長填充绰沥,例如 "n" + "s" 表示將組件垂直拉長填充網(wǎng)格篱蝇,"n" + "s" + "w" + "e" 表示填充整個網(wǎng)格
4. 不指定該值則居中顯示

grid_bbox(column=None, row=None, col2=None, row2=None)
-- 返回一個 4 元組描述該組件所在的限定矩形-- 如果指定 column 和 cow 參數(shù),則返回該位置(column, cow)的組件的限定矩形描述
-- 如果指定 4 個參數(shù)徽曲,則返回從(column, cow)到(col2, row2)所有組件的限定矩形描述
-- 例如 grid_bbox(0, 0, 1, 1) 返回的是 4 個組件所在的限定矩形

grid_columnconfigure(index, **options)
-- 設(shè)置列的屬性
-- 注意:設(shè)置的是該組件所擁有的 grid 的列
-- 可以設(shè)置的選項及含義如下:

選項 含義
minsize 指定該列的最小寬度
pad 指定該列中最大網(wǎng)格的水平邊距
weight 1. 指定列與列之間的相對距離
2. 默認值是 0
3. 這個你比較難理解态兴,小甲魚還是詳細解說下:初創(chuàng)建窗口的時候,grid 會自動根據(jù)組件的尺寸分配窗口的尺寸疟位,當你拉伸窗口的尺寸時就會有空白顯示出來瞻润。這個選項正是指定列與列之間是否填充空白,默認是不填充的甜刻。另外绍撞,該選項的值是指定填充空白的倍數(shù),例如 weight = 2 的列會比 weight = 1 的列填充多一倍的空白得院。所以需要平均填充的話傻铣,只需要所有的列都設(shè)置 weight = 1 即可。

grid_configure(**options)
-- 跟 grid() 一樣

grid_forget()
-- 將組件從屏幕中“刪除”
-- 并沒有銷毀該組件祥绞,只是看不到了
-- 可以通過 grid 或其他布局管理器顯示已“刪除”的組件非洲,但該組件所在網(wǎng)格的選項設(shè)置不會恢復(fù)

grid_info()
-- 以字典的形式返回當前 grid 的選項

grid_location(x, y)
-- 返回位于(或接近)給定坐標(x, y)的網(wǎng)格位置
-- 返回值是一個 2 元組表示網(wǎng)格對應(yīng)的(列,行)

grid_propagate(flag)
-- 如果開啟蜕径,父組件會自動調(diào)節(jié)尺寸以容納所有子組件
-- 默認值是開啟(flag = True)
-- 該方法僅適用于父組件

grid_remove()
-- 跟 grid_forget() 一樣两踏,但恢復(fù)的時候會記住該組件所在網(wǎng)格的選項設(shè)置

grid_rowconfigure(index, **options)
-- 設(shè)置行的屬性
-- 注意:設(shè)置的是該組件所擁有的 grid 的行
-- 可以設(shè)置的選項及含義如下:

選項 含義
minsize 指定該行的最小高度
pad 指定該列中最大網(wǎng)格的垂直邊距
weight 1. 指定行與行之間的相對距離
2. 默認值是 0
3. 這個你比較難理解,不懂可以參考上邊 grid_columnconfigure() 的詳細解釋

grid_size()
-- 返回該組件所擁有的 grid 的尺寸
-- 返回值是一個 2 元組兜喻,表示(列, 行)分別的網(wǎng)格數(shù)

grid_slaves(row=None, column=None)
-- 以列表的形式返回該組件的所有子組件
-- 該方法僅適用于父組件

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梦染,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子朴皆,更是在濱河造成了極大的恐慌帕识,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遂铡,死亡現(xiàn)場離奇詭異肮疗,居然都是意外死亡,警方通過查閱死者的電腦和手機扒接,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門伪货,熙熙樓的掌柜王于貴愁眉苦臉地迎上來们衙,“玉大人,你說我怎么就攤上這事超歌】嘲” “怎么了蒂教?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵巍举,是天一觀的道長。 經(jīng)常有香客問我凝垛,道長懊悯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任梦皮,我火速辦了婚禮炭分,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剑肯。我一直安慰自己捧毛,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布让网。 她就那樣靜靜地躺著呀忧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪溃睹。 梳的紋絲不亂的頭發(fā)上而账,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音因篇,去河邊找鬼泞辐。 笑死,一個胖子當著我的面吹牛竞滓,可吹牛的內(nèi)容都是我干的咐吼。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼商佑,長吁一口氣:“原來是場噩夢啊……” “哼汽烦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起莉御,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤撇吞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后礁叔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牍颈,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年琅关,在試婚紗的時候發(fā)現(xiàn)自己被綠了煮岁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讥蔽。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖画机,靈堂內(nèi)的尸體忽然破棺而出冶伞,到底是詐尸還是另有隱情,我是刑警寧澤步氏,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布响禽,位于F島的核電站,受9級特大地震影響荚醒,放射性物質(zhì)發(fā)生泄漏芋类。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一界阁、第九天 我趴在偏房一處隱蔽的房頂上張望侯繁。 院中可真熱鬧,春花似錦泡躯、人聲如沸贮竟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咕别。三九已至,卻和暖如春重付,著一層夾襖步出監(jiān)牢的瞬間顷级,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工确垫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弓颈,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓删掀,卻偏偏與公主長得像翔冀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子披泪,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • CSS Grid(網(wǎng)格) 布局(又稱為 “Grid(網(wǎng)格)” )纤子,是一個二維的基于網(wǎng)格的布局系統(tǒng)它的目標是完全改變...
    諾CIUM閱讀 1,307評論 0 3
  • 網(wǎng)格線(Grid Line) 構(gòu)成網(wǎng)格結(jié)構(gòu)的分界線。它們既可以是垂直的(“列網(wǎng)格線(column grid lin...
    晚溪呀閱讀 1,164評論 0 0
  • 上一篇款票,介紹了grid的瀏覽器兼容和重要的幾個概念控硼,接下來繼續(xù)介紹grid的容器屬性。 Grid(網(wǎng)格) 屬性目錄...
    codeTao閱讀 2,044評論 0 1
  • 簡介 CSS網(wǎng)格布局(又名“網(wǎng)格”)是一個二維的基于網(wǎng)格的布局系統(tǒng)艾少,其目的只在于完全改變我們設(shè)計基于網(wǎng)格的用戶界面...
    禮知白閱讀 664評論 0 0
  • 一天的時間卡乾,下午去上了一節(jié)課,然后就呆在了這里缚够。 搬寢室得傳言愈演愈烈幔妨,有人問了導(dǎo)員鹦赎,應(yīng)該也是確定下來得了。 三年...
    摩托車水瓶閱讀 272評論 0 0