網站首頁 編程語言 正文
pack、grid 和 place 均用于管理同在一個父組件下的所有組件的布局,其中:
pack 是按添加順序排列組件grid 是按行/列形式排列組件place 則允許程序員指定組件的大小和位置
何時使用 grid 管理器?
grid 管理器可以說是 Tkinter 這三個布局管理器中最靈活多變的。如果你只希望學習使用一個布局管理器,那么 grid 絕對是首選。當你在設計對話框的時候,使用 gird 尤其便捷。如果你此前一直在用 pack 構造窗口布局,那么學習完 grid 你會悔恨當初為啥不早學它。使用一個 grid 就可以簡單的實現你用很多個框架和 pack 搭建起來的效果。
注意:不要在同一個父組件中混合使用 pack 和 grid,因為 Tkinter 會很認真地在那兒計算到底先使用那個布局管理器......以至于你等了半個小時,Tkinter 還在那兒糾結不出結果!
用法
使用 grid 排列組件,只需告訴它你想要將組件放置的位置(行/列,row 選項指定行,cloumn 選項指定列)。此外,你并不用提前指出網格(grid 分布給組件的位置稱為網格)的尺寸,因為管理器會自動計算。
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()
默認情況下組件會居中顯示在對應的網格里,你可以使用 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")
有時候你可能需要用幾個網格來放置一個組件,可以做到嗎?當然可以,你只需要指定 rowspan 和 columnspan 就可以實現跨行和跨列的功能:
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 | 指定水平方向上的內邊距 |
ipady | 指定垂直方向上的內邊距 |
padx | 指定水平方向上的外邊距 |
pady | 指定垂直方向上的外邊距 |
row | 指定組件插入的行(0 表示第 1 行) |
rowspan | 指定用多少行(跨行)顯示該組件 |
sticky | 1. 控制組件在 grid 分配的空間中的位置 2. 可以使用 "n", "e", "s", "w" 以及它們的組合來定位(ewsn代表東西南北,上北下南左西右東) 3. 使用加號(+)表示拉長填充,例如 "n" + "s" 表示將組件垂直拉長填充網格,"n" + "s" + "w" + "e" 表示填充整個網格 4. 不指定該值則居中顯示 |
grid_bbox(column=None, row=None, col2=None, row2=None)
-- 返回一個 4 元組描述該組件所在的限定矩形-- 如果指定 column 和 cow 參數,則返回該位置(column, cow)的組件的限定矩形描述
-- 如果指定 4 個參數,則返回從(column, cow)到(col2, row2)所有組件的限定矩形描述
-- 例如 grid_bbox(0, 0, 1, 1) 返回的是 4 個組件所在的限定矩形
grid_columnconfigure(index, **options)
-- 設置列的屬性
-- 注意:設置的是該組件所擁有的 grid 的列
-- 可以設置的選項及含義如下:
選項 | 含義 |
minsize | 指定該列的最小寬度 |
pad | 指定該列中最大網格的水平邊距 |
weight | 1. 指定列與列之間的相對距離 2. 默認值是 0 3. 這個你比較難理解,小甲魚還是詳細解說下:初創建窗口的時候,grid 會自動根據組件的尺寸分配窗口的尺寸,當你拉伸窗口的尺寸時就會有空白顯示出來。這個選項正是指定列與列之間是否填充空白,默認是不填充的。另外,該選項的值是指定填充空白的倍數,例如 weight = 2 的列會比 weight = 1 的列填充多一倍的空白。所以需要平均填充的話,只需要所有的列都設置 weight = 1 即可。 |
grid_configure(**options)
-- 跟 grid() 一樣
grid_forget()
-- 將組件從屏幕中“刪除”
-- 并沒有銷毀該組件,只是看不到了
-- 可以通過 grid 或其他布局管理器顯示已“刪除”的組件,但該組件所在網格的選項設置不會恢復
grid_info()
-- 以字典的形式返回當前 grid 的選項
grid_location(x, y)
-- 返回位于(或接近)給定坐標(x, y)的網格位置
-- 返回值是一個 2 元組表示網格對應的(列,行)
grid_propagate(flag)
-- 如果開啟,父組件會自動調節尺寸以容納所有子組件
-- 默認值是開啟(flag = True)
-- 該方法僅適用于父組件
grid_remove()
-- 跟 grid_forget() 一樣,但恢復的時候會記住該組件所在網格的選項設置
grid_rowconfigure(index, **options)
-- 設置行的屬性
-- 注意:設置的是該組件所擁有的 grid 的行
-- 可以設置的選項及含義如下:
選項 | 含義 |
minsize | 指定該行的最小高度 |
pad | 指定該列中最大網格的垂直邊距 |
weight | 1. 指定行與行之間的相對距離 2. 默認值是 0 3. 這個你比較難理解,不懂可以參考上邊 grid_columnconfigure() 的詳細解釋 |
grid_size()
-- 返回該組件所擁有的 grid 的尺寸
-- 返回值是一個 2 元組,表示(列, 行)分別的網格數
grid_slaves(row=None, column=None)
-- 以列表的形式返回該組件的所有子組件
-- 該方法僅適用于父組件
原文鏈接:https://blog.csdn.net/qq_41556318/article/details/85108467
相關推薦
- 2022-03-21 C語言版約瑟夫問題算法實現_C 語言
- 2023-05-22 NumPy迭代數組的實現_python
- 2022-05-09 Redis擊穿穿透雪崩產生原因分析及解決思路面試_Redis
- 2024-03-23 如何保證Redis和數據庫數據一致性
- 2022-12-04 React?Native自定義Android的SSL證書鏈校驗_React
- 2022-03-28 Python垃圾回收及Linux?Fork_python
- 2022-08-04 Python?venv虛擬環境跨設備遷移的實現_python
- 2023-11-18 python字符串string的截取;獲取字符串內的一串
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支