Python中Tkinter布局管理grid的使用
pack、grid 和 place 均用于管理同在一個(gè)父組件下的所有組件的布局,其中:
pack 是按添加順序排列組件grid 是按行/列形式排列組件place 則允許程序員指定組件的大小和位置
何時(shí)使用 grid 管理器?
grid 管理器可以說是 Tkinter 這三個(gè)布局管理器中最靈活多變的。如果你只希望學(xué)習(xí)使用一個(gè)布局管理器,那么 grid 絕對(duì)是首選。當(dāng)你在設(shè)計(jì)對(duì)話框的時(shí)候,使用 gird 尤其便捷。如果你此前一直在用 pack 構(gòu)造窗口布局,那么學(xué)習(xí)完 grid 你會(huì)悔恨當(dāng)初為啥不早學(xué)它。使用一個(gè) grid 就可以簡(jiǎn)單的實(shí)現(xiàn)你用很多個(gè)框架和 pack 搭建起來的效果。
注意:不要在同一個(gè)父組件中混合使用 pack 和 grid,因?yàn)?Tkinter 會(huì)很認(rèn)真地在那兒計(jì)算到底先使用那個(gè)布局管理器......以至于你等了半個(gè)小時(shí),Tkinter 還在那兒糾結(jié)不出結(jié)果!
用法
使用 grid 排列組件,只需告訴它你想要將組件放置的位置(行/列,row 選項(xiàng)指定行,cloumn 選項(xiàng)指定列)。此外,你并不用提前指出網(wǎng)格(grid 分布給組件的位置稱為網(wǎng)格)的尺寸,因?yàn)楣芾砥鲿?huì)自動(dòng)計(jì)算。
import tkinter as tk root = tk.Tk() # column 默認(rèn)值是 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()
默認(rèn)情況下組件會(huì)居中顯示在對(duì)應(yīng)的網(wǎng)格里,你可以使用 sticky 選項(xiàng)來修改這一特性。該選項(xiàng)可以使用的值有 "e","w","s","n"(ewsn 分別表示東西南北,即上北下南左西右東)以及它們的組合。因此,我們可以通過 sticky = "w" 使得 Label 左對(duì)齊:
tk.Label(root, text="用戶名").grid(row=0, sticky="w") tk.Label(root, text="密碼").grid(row=1, sticky="w")
有時(shí)候你可能需要用幾個(gè)網(wǎng)格來放置一個(gè)組件,可以做到嗎?當(dāng)然可以,你只需要指定 rowspan 和 columnspan 就可以實(shí)現(xiàn)跨行和跨列的功能:
import tkinter as tk root = tk.Tk() # column 默認(rèn)值是 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)
-- 下方表格詳細(xì)列舉了各個(gè)選項(xiàng)的具體含義和用法:
選項(xiàng) | 含義 |
column | 1. 指定組件插入的列(0 表示第 1 列) 2. 默認(rèn)值是 0 |
columnspan | 指定用多少列(跨列)顯示該組件 |
in_ | 1. 將該組件放到該選項(xiàng)指定的組件中 2. 指定的組件必須是該組件的父組件 |
ipadx | 指定水平方向上的內(nèi)邊距 |
ipady | 指定垂直方向上的內(nèi)邊距 |
padx | 指定水平方向上的外邊距 |
pady | 指定垂直方向上的外邊距 |
row | 指定組件插入的行(0 表示第 1 行) |
rowspan | 指定用多少行(跨行)顯示該組件 |
sticky | 1. 控制組件在 grid 分配的空間中的位置 2. 可以使用 "n", "e", "s", "w" 以及它們的組合來定位(ewsn代表東西南北,上北下南左西右東) 3. 使用加號(hào)(+)表示拉長(zhǎng)填充,例如 "n" + "s" 表示將組件垂直拉長(zhǎng)填充網(wǎng)格,"n" + "s" + "w" + "e" 表示填充整個(gè)網(wǎng)格 4. 不指定該值則居中顯示 |
grid_bbox(column=None, row=None, col2=None, row2=None)
-- 返回一個(gè) 4 元組描述該組件所在的限定矩形-- 如果指定 column 和 cow 參數(shù),則返回該位置(column, cow)的組件的限定矩形描述
-- 如果指定 4 個(gè)參數(shù),則返回從(column, cow)到(col2, row2)所有組件的限定矩形描述
-- 例如 grid_bbox(0, 0, 1, 1) 返回的是 4 個(gè)組件所在的限定矩形
grid_columnconfigure(index, **options)
-- 設(shè)置列的屬性
-- 注意:設(shè)置的是該組件所擁有的 grid 的列
-- 可以設(shè)置的選項(xiàng)及含義如下:
選項(xiàng) | 含義 |
minsize | 指定該列的最小寬度 |
pad | 指定該列中最大網(wǎng)格的水平邊距 |
weight | 1. 指定列與列之間的相對(duì)距離 2. 默認(rèn)值是 0 3. 這個(gè)你比較難理解,小甲魚還是詳細(xì)解說下:初創(chuàng)建窗口的時(shí)候,grid 會(huì)自動(dòng)根據(jù)組件的尺寸分配窗口的尺寸,當(dāng)你拉伸窗口的尺寸時(shí)就會(huì)有空白顯示出來。這個(gè)選項(xiàng)正是指定列與列之間是否填充空白,默認(rèn)是不填充的。另外,該選項(xiàng)的值是指定填充空白的倍數(shù),例如 weight = 2 的列會(huì)比 weight = 1 的列填充多一倍的空白。所以需要平均填充的話,只需要所有的列都設(shè)置 weight = 1 即可。 |
grid_configure(**options)
-- 跟 grid() 一樣
grid_forget()
-- 將組件從屏幕中“刪除”
-- 并沒有銷毀該組件,只是看不到了
-- 可以通過 grid 或其他布局管理器顯示已“刪除”的組件,但該組件所在網(wǎng)格的選項(xiàng)設(shè)置不會(huì)恢復(fù)
grid_info()
-- 以字典的形式返回當(dāng)前 grid 的選項(xiàng)
grid_location(x, y)
-- 返回位于(或接近)給定坐標(biāo)(x, y)的網(wǎng)格位置
-- 返回值是一個(gè) 2 元組表示網(wǎng)格對(duì)應(yīng)的(列,行)
grid_propagate(flag)
-- 如果開啟,父組件會(huì)自動(dòng)調(diào)節(jié)尺寸以容納所有子組件
-- 默認(rèn)值是開啟(flag = True)
-- 該方法僅適用于父組件
grid_remove()
-- 跟 grid_forget() 一樣,但恢復(fù)的時(shí)候會(huì)記住該組件所在網(wǎng)格的選項(xiàng)設(shè)置
grid_rowconfigure(index, **options)
-- 設(shè)置行的屬性
-- 注意:設(shè)置的是該組件所擁有的 grid 的行
-- 可以設(shè)置的選項(xiàng)及含義如下:
選項(xiàng) | 含義 |
minsize | 指定該行的最小高度 |
pad | 指定該列中最大網(wǎng)格的垂直邊距 |
weight | 1. 指定行與行之間的相對(duì)距離 2. 默認(rèn)值是 0 3. 這個(gè)你比較難理解,不懂可以參考上邊 grid_columnconfigure() 的詳細(xì)解釋 |
grid_size()
-- 返回該組件所擁有的 grid 的尺寸
-- 返回值是一個(gè) 2 元組,表示(列, 行)分別的網(wǎng)格數(shù)
grid_slaves(row=None, column=None)
-- 以列表的形式返回該組件的所有子組件
-- 該方法僅適用于父組件
到此這篇關(guān)于Python中Tkinter布局管理grid的使用的文章就介紹到這了,更多相關(guān)Python Tkinter grid內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 羊了個(gè)羊通關(guān)腳本Vue?node實(shí)現(xiàn)版本
- JS實(shí)現(xiàn)羊了個(gè)羊小游戲?qū)嵗?/a>
- QT布局管理詳解QVBoxLayout與QHBoxLayout及QGridLayout的使用
- WPF使用Grid網(wǎng)格面板布局
- Vue3.0利用vue-grid-layout插件實(shí)現(xiàn)拖拽布局
- 在echarts中圖例legend和坐標(biāo)系grid實(shí)現(xiàn)左右布局實(shí)例
- python GUI庫圖形界面開發(fā)之PyQt5布局控件QGridLayout詳細(xì)使用方法與實(shí)例
- 羊了個(gè)羊的中強(qiáng)大的Grid布局
相關(guān)文章
Windows下實(shí)現(xiàn)Python2和Python3兩個(gè)版共存的方法
這篇文章主要介紹了Windows下實(shí)現(xiàn)Python2和Python3兩個(gè)版共存的方法,本文詳細(xì)的給出了操作步驟和設(shè)置完成后的使用方法,需要的朋友可以參考下2015-06-06Python?如何實(shí)現(xiàn)批量轉(zhuǎn)換視頻音頻的采樣率
這篇文章主要分享一個(gè)python代碼,可以將多個(gè)視頻中的音頻轉(zhuǎn)化為相同采樣率的視頻,具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2021-11-11python簡(jiǎn)單驗(yàn)證碼識(shí)別的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于python簡(jiǎn)單驗(yàn)證碼識(shí)別的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05numpy實(shí)現(xiàn)RNN原理實(shí)現(xiàn)
這篇文章主要介紹了numpy實(shí)現(xiàn)RNN原理實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Python字符串內(nèi)置函數(shù)功能與用法總結(jié)
這篇文章主要介紹了Python字符串內(nèi)置函數(shù)功能與用法,結(jié)合實(shí)例形式總結(jié)分析了Python常見字符串操作函數(shù)的功能、分類、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-04-04Python閉包之返回函數(shù)的函數(shù)用法示例
這篇文章主要介紹了 Python閉包之返回函數(shù)的函數(shù)用法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01pytho matplotlib工具欄源碼探析一之禁用工具欄、默認(rèn)工具欄和工具欄管理器三種模式的差異
這篇文章主要介紹了pytho matplotlib工具欄源碼探析一之禁用工具欄、默認(rèn)工具欄和工具欄管理器三種模式的差異,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02python re正則匹配網(wǎng)頁中圖片url地址的方法
今天小編就為大家分享一篇python re正則匹配網(wǎng)頁中圖片url地址的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12Python可視化目標(biāo)檢測(cè)框的實(shí)現(xiàn)代碼
這篇文章主要介紹了Python可視化目標(biāo)檢測(cè)框的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09