我只是在學習如何使用 tkinter 制作 GUI。似乎有很多關于如何制作新框架的資源,但我似乎找不到任何解釋如何在多個框架中實際添加內容而不會遇到問題的東西。
我有一個筆記本,因為我正在使用多個選項卡來查看我正在使用的 2 個不同的框架。死,簡單,第一幀中有 2 個按鈕,一個隱藏第二個選項卡,另一個按鈕顯示第二個選項卡。第二個選項卡內是第二個框架。一切正常,但只要我把任何東西放在第二個框架內,兩個框架都會縮小。代碼如下:
from tkinter import *
from tkinter import ttk
root = Tk()
root.title('Tabs')
root.geometry("500x500")
my_notebook = ttk.Notebook(root)
my_notebook.pack(pady=15)
def hide():
my_notebook.hide(1)
def show():
my_notebook.add(my_frame2, text="Red Tab")
my_frame1= Frame(my_notebook, width=500, height=500, bg="blue")
my_frame2= Frame(my_notebook, width=500, height=500, bg="red")
my_frame1.pack(fill="both", expand=1)
my_frame2.pack(fill="both", expand=1)
my_notebook.add(my_frame1, text="Blue Tab")
my_notebook.add(my_frame2, text="Red Tab")
my_button = Button(my_frame1, text="Hide Tab2", command=hide).grid(row=0, column=0)
my_button2 = Button(my_frame1, text="Show Tab2", command=show).grid(row=1, column=1)
my_button3 = Button(my_frame2, text="Random button").grid(row=1, column=1)
root.mainloop()
洗掉 my_button3 后,一切看起來都很好。當它在代碼中時,一切都會縮小。有誰知道我在做什么導致這種情況?
uj5u.com熱心網友回復:
在 tkinter 中,當一個框架沒有子框架時,它會占據它初始化的整個空間。但是,當您向其中添加一些子小部件時,它只需要容納其子小部件所需的空間。
在您的代碼中,當您添加my_button3to時my_frame2,它會縮小以適應按鈕。
早些時候,當您沒有將按鈕添加到第二幀時,筆記本的大小是適當的,即使my_frame1不需要整個空間,因為my_frame2仍然是空的。my_frame2決定筆記本的大小。
因此,您的問題的直接解決方案是:
my_frame1.grid_propagate(False)
要么
my_frame2.grid_propagate(False)
做什么grid_propagate?
它基本上告訴框架傳播/不傳播取決于它的孩子。(真 = 傳播 [默認])
類似grid_propagate,也有pack_propagate。使用正確的方法取決于用于將子項添加到框架的幾何管理器。(不是用于將框架添加到其父級的幾何管理器)
但是,通常不建議使用grid_propagateand pack_propagate,因為您正在對空間管理進行硬編碼。Tkinter 擅長根據其子小部件調整父級的大小。在大多數情況下,這會使整個 GUI 以正確的比例看起來不錯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/446463.html
