因此,我一直在tkinter中使用canvas小部件来创建一个充满标签的框架,该框架具有滚动条。除了框架仅扩展到放置在其中的标签的大小外,其他所有组件都工作良好-我希望框架扩展到父画布的大小。
如果我对画布中的框架使用pack(expand = True)(在下面的代码中已注释掉),则可以轻松完成此操作,但随后滚动条将不起作用。
这是适当的代码位:
...
self.canvas = Canvas(frame, bg = 'pink')
self.canvas.pack(side = RIGHT, fill = BOTH, expand = True)
self.mailbox_frame = Frame(self.canvas, bg = 'purple')
self.canvas.create_window((0,0),window=self.mailbox_frame, anchor = NW)
#self.mailbox_frame.pack(side = LEFT, fill = BOTH, expand = True)
mail_scroll = Scrollbar(self.canvas, orient = "vertical",
command = self.canvas.yview)
mail_scroll.pack(side = RIGHT, fill = Y)
self.canvas.config(yscrollcommand = mail_scroll.set)
self.mailbox_frame.bind("<Configure>", self.OnFrameConfigure)
def OnFrameConfigure(self, event):
self.canvas.configure(scrollregion=self.canvas.bbox("all"))
我还提供了带有彩色边框的图像,以便您可以看到我的意思。粉色区域是需要用mailbox_frame填充的画布(您可以在右侧看到滚动条):
在canvas<Configure>
事件上设置一个绑定,每当画布更改大小时都会触发。从事件对象中,您可以获取画布的宽度和高度,并使用它来调整框架的大小。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句