因此,当我初始化我的Gui类然后打包()我的标签和按钮小部件时,我已经配置了它们存在于休息中的帧的漂亮的框架样式。为什么如果你注释掉按钮的包装并标记小部件,它就是我想要它的样子。
class Gui(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
self.parent.wm_title("Conflict found")
self.TV = 'Hello'
# Creation
self.statusbar = statusbar(self, bg="black", height=100, width=300)
self.main = Main(self, bg="grey", height=50, width=300)
# Packing
self.statusbar.pack(side="top", expand=True)
self.statusbar.label.pack()
self.main.pack(side="bottom", expand=True)
self.main.button.pack()
def quit(self):
self.parent.destroy()
class Main(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
self.button = tk.Button(self, text="Exit", command=self.quit)
class statusbar(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
self.label = tk.Label(self, text=self.parent.TV, fg='white')
答案 0 :(得分:2)
简短的回答是,这就是tkinter的设计方式。当您使用pack
或grid
时,tkinter将导致父窗口增大或缩小以适合其子项。
这是你想要99.999%的时间,因为它可以让你根据字符大小(或重要时的像素,如图像)来关注小部件的大小,并且GUI的大小合适。
当您为框架和窗口选择特定大小时,如果用户具有不同的字体,不同的操作系统或具有不同分辨率的显示器,或者用户尝试增长或者用户,则您的程序看起来不会正常手动缩小窗口。
有很多方法可以解决此问题,但您几乎不想关闭此行为。最好的解决方案是关注内部小部件,让tkinter担心窗口大小。
而不是思考"我需要一个100像素高,300像素宽的状态栏",想想"我需要一个可以容纳至少20个字符的状态栏,并且水平填充窗口& #34 ;.无论您使用什么字体,分辨率或操作系统,Tkinter都会做正确的事情。
答案 1 :(得分:1)
Frame的height=
和width=
通常仅在Frame为空时才适用。只要向其添加任何子窗口小部件,就会将其大小重新计算为保存所有子项所需的最小值。为避免这种情况,您可以在框架上调用.pack_propagate(0)
(如果您对儿童使用.grid_propagate(0)
,则为.grid()
)。