所以我一直在使用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"))

我还提供了一个带有彩色边框的图像,这样你就可以看到我的意思了.粉红色区域是需要通过邮箱_框架填充的画布(您可以看到右侧的滚动条):

推荐答案

在canvas <Configure>事件上设置绑定,该事件在canvas更改大小时触发.从事件对象可以获得画布的宽度和高度,并使用该宽度和高度调整框架的大小.

Python-3.x相关问答推荐

根据其他数据框架的列顺序从数据框架中进行 Select

为什么在Python中使用RANDINT函数时会出现此TypeError?

将列表项的极列水平分解为新列

Heroku 中的未知错误代码缺少一个或多个参数

计算文档中所有关键字(单词和多词)出现的频率

生成具有偶数个 0 和 1 的给定长度的所有二进制数

将 rgb numpy 图像转换为 rgb 列表和相应的索引值

嵌套协议的使用(协议成员也是协议)

正则表达式来识别用 Python 写成单词的数字?

聚合(aggregate)为最多包含两个元素的列表

Pandas数据单调行为

Pandas 将列格式化为货币

python3:字节与字节数组,并转换为字符串和从字符串转换

获取嵌套字典的所有键

Pythonic,自定义警告

全局捕获快速 api 中的异常

Python3 mysqlclient-1.3.6(又名 PyMySQL)的用法?

导入 python 模块而不实际执行它

PIL 在图像上绘制半透明方形覆盖

Python3 - 如何从现有抽象类定义抽象子类?