【问题标题】:How can I center my scrollbar contents in tkinter?如何在 tkinter 中将滚动条内容居中?
【发布时间】:2021-10-31 13:07:30
【问题描述】:

我创建了我的应用程序的一部分,用户可以在其中滚动浏览多个小部件。我的问题是我无法弄清楚如何设置可滚动区域(tk.Frame)以将其宽度调整为父框架。这是因为框架放置在画布窗口中,因此从不调用 grid() 或 pack(),因此我不能使用sticky=tk.EW。我应该注意,设置画布 anchor=tk.CENTER 也不起作用。

这是我的代码。 self.workspace_frame 引用父框架:

    # Initialize scrollbar
    scrollbar = tk.Scrollbar(self.workspace_frame)
    scrollbar.configure(
        orient=tk.VERTICAL,
        command=canvas.yview
    )

    # Initialize contents frame
    contents = tk.Frame(canvas)
    contents.configure(
        #background=self.receded_color
        background='red'
    )

    # Prevent resizing problems
    contents.bind(
        '<Configure>',
        lambda event: canvas.configure(
            scrollregion=canvas.bbox(tk.ALL)
        )
    )

    # Configure canvas
    canvas.create_window((0, 0), window=contents)
    canvas.configure(
        yscrollcommand=scrollbar.set,
        background=self.receded_color,
        highlightthickness=0
    )

    # Add elements to grid
    canvas.grid(column=0, row=0, sticky=tk.NS)
    scrollbar.grid(column=1, row=0, sticky=tk.NS)

这是我的滚动条和滚动区域的样子。红色表示我正在努力居中的框架:My App

谢谢。

【问题讨论】:

    标签: python user-interface tkinter


    【解决方案1】:

    如果您希望红框 (contents) 的宽度与其父框 (canvas) 的宽度相同,则需要在调整其父框大小后调整其宽度:

    canvas.bind('<Configure>', lambda e: contents.config(width=e.width))
    

    【讨论】:

    • 你是救生员。
    猜你喜欢
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多