Window 在Tkinter中打包一个新的Frame后突然缩小

Window suddenly shrinks after packing a new Frame in Tkinter

我正在开发一个应该占据整个屏幕的应用程序。刚开始的时候,我的初衷是大量切换Frames。例如,假设用户想要转到设置。它会从主框架切换到设置框架。

但是,为了处理其他框架的一些复杂情况,我发现我必须在第一个框架下面添加另一个框架。例如,它会在主屏幕框架下面有一个主框架,这样如果用户决定打开设置,它就会忘记主框架,并在主框架上显示设置框架。

我的问题是,当我添加底层框架时,事情变得一团糟。 Tk() 小部件变小了,当我单击并将其拖动得更大时,一切都不成比例了。然而,当我点击按钮时它确实显示了设置 :D.

这是我的代码:

self.main = Tk()
self.mainFrame = Frame()
self.mainFrame.pack(expand = True, fill = "both")

self.padding = Canvas(self.mainFrame, width = 1439, height = 
self.CANVAS_HEIGHT)
self.padding.pack()

self.startFrame = Frame(self.mainFrame)
self.startFrame.place(relx = 0.0, rely = 0.0, anchor = "nw")

self.settingsFrame = Frame(self.mainFrame)
self.settingsCanvas = Canvas(self.settingsFrame, bg = "saddleBrown", width = self.CANVAS_WIDTH,  height = self.CANVAS_HEIGHT)
self.settingsCanvas.pack()

self.startFrame.pack_forget()
self.settingsFrame.pack()

再一次,当我运行代码时,一切都不成比例了。 如果不清楚,请告诉我。

请注意,您正在放置 startFrame 然后 pack_forget 放置它,但您应该 place_forget 它。

除了你代码中的一些奇怪的东西,我不建议在这种情况下使用 place,pack 应该做得更好(实际上我只是在一些特定情况下使用 place ).

如果您决定使用 pack 几何管理器,并且如果您希望您的框架随 window 一起调整大小,您应该表明您希望它们最终自由扩展和填充space 在两个方向上,垂直和水平(或 y 和 x):

startFrame.pack(expand=True, fill='both')  # both = x and y

如果您想为 Frame 指定固定大小,请参阅 Bryan Oakleypost

我真的建议你看一些关于 pack 几何管理器的教程或参考资料,因为如果你想认真做某事,它真的很有用。您可以从 Effbot 的 reference.

开始阅读