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 Oakley 的 post。
我真的建议你看一些关于 pack
几何管理器的教程或参考资料,因为如果你想认真做某事,它真的很有用。您可以从 Effbot 的 reference.
开始阅读
我正在开发一个应该占据整个屏幕的应用程序。刚开始的时候,我的初衷是大量切换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 Oakley 的 post。
我真的建议你看一些关于 pack
几何管理器的教程或参考资料,因为如果你想认真做某事,它真的很有用。您可以从 Effbot 的 reference.