【问题标题】:Python Tkinter - Scrollable canvas containing expandable widgetsPython Tkinter - 包含可扩展小部件的可滚动画布
【发布时间】:2011-07-02 05:51:22
【问题描述】:

我正在使用 Python Tkinter,我想在框架或画布中放置可变数量的文本框小部件。文本框垂直排列在框架下方,所以第一个在顶部,第二个在下面,等等。我可以在 GUI 的“左侧”中拥有所有按钮、列表框等小部件,而“右侧部分”将仅包含文本框小部件。我希望文本框小部件在主窗口最大化时水平扩展,但由于这些小部件的数量可变,包含文本框的“右侧部分”也需要能够垂直滚动以查看它们。

目前,我正在使用 Canvas.create_window 将可变数量的文本框添加到画布中,虽然我可以滚动画布以查看所有文本框,但当我调整窗口大小时它们不会水平扩展。我有一个备用 GUI,它使用“右侧部分”的框架,它允许小部件水平扩展,但如果包装太多,我无法滚动框架以查看其他文本框,因为我无法滚动栏杆系在框架上。

有什么办法可以绕过这种权衡吗?

【问题讨论】:

    标签: python canvas widget scroll tkinter


    【解决方案1】:

    解决方案非常简单:绑定到画布的<Configure> 事件——这将导致在调整画布小部件大小时调用您的回调。然后,您只需要获取画布的宽度并使用它来迭代地调整所有嵌入式窗口的大小。

    【讨论】:

    • 我假设要绑定到画布的 事件,我只需要输入:canvas.bind("")。为了获得画布的宽度,我可以使用 canvas.cget("width")。我不确定使用宽度来调整所有嵌入文本框的大小。
    • 我一直在网上寻求帮助。是否可以在创建文本框后更改其宽度?或者为此更改任何小部件的宽度?我知道我可以重新创建对象,但我宁愿改变宽度。我确实想出了如何使用 winfo_width() 获取画布的宽度,但我一直在更改文本框的宽度。非常感谢您迄今为止的帮助!
    • 好的,只要调整窗口大小,我就重新创建了文本对象,现在它可以工作了。再次感谢您的帮助。
    • @dmranck:不需要每次都重新创建小部件。画布小部件有一个名为 itemconfig 的方法,您可以使用它来更改窗口的宽度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2016-07-26
    • 1970-01-01
    • 2018-06-28
    • 2014-06-04
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多