首页 > 解决方案 > 如何在 tkinter 中将滚动条内容居中?

问题描述

我创建了我的应用程序的一部分,用户可以在其中滚动浏览多个小部件。我的问题是我无法弄清楚如何设置可滚动区域(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)

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

谢谢。

标签: pythonuser-interfacetkinter

解决方案


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

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

推荐阅读