【问题标题】:Why is my tkinter horizontal scrollbar squashed in the bottom, right-hand corner, but the vertical scrollbar looks normal?为什么我的 tkinter 水平滚动条在右下角被压扁,但垂直滚动条看起来正常?
【发布时间】:2020-12-28 03:13:09
【问题描述】:

我正在使用下面的代码在 tkinter 窗口中创建两个滚动条,然后用文本小部件等填充它。

垂直滚动条看起来不错,而且似乎工作正常(除了我不能使用鼠标滚轮滚动),但水平滚动条似乎被压扁到底部,右侧角落窗户。

据我所知,我将两个滚动条设置为相同的方式,那么为什么水平滚动条不会延伸到窗口底部呢?

# Create a main frame with a canvas so that it's possible use a scroll bar
self.current_rendered_window["main_frame"] = Frame(root)
self.current_rendered_window["main_frame"].pack(fill=BOTH, expand=1)

self.current_rendered_window["main_canvas"] = Canvas(self.current_rendered_window["main_frame"])
self.current_rendered_window["main_canvas"].pack(side=LEFT, fill=BOTH, expand=1)

self.current_rendered_window["main_scrollbar"] = ttk.Scrollbar(
    self.current_rendered_window["main_frame"],
    orient=VERTICAL, command=self.current_rendered_window["main_canvas"].yview
)
self.current_rendered_window["main_scrollbar"].pack(side=RIGHT, fill=Y)

self.current_rendered_window["horizontal_scrollbar"] = ttk.Scrollbar(
    self.current_rendered_window["main_frame"],
    orient=HORIZONTAL, command=self.current_rendered_window["main_canvas"].xview
)
self.current_rendered_window["horizontal_scrollbar"].pack(side=BOTTOM, fill=X)

self.current_rendered_window["main_canvas"].configure(
    yscrollcommand=self.current_rendered_window["main_scrollbar"].set,
    xscrollcommand=self.current_rendered_window["horizontal_scrollbar"].set
)
self.current_rendered_window["main_canvas"].bind(
    '<Configure>',
    lambda e: self.current_rendered_window["main_canvas"].configure(
        scrollregion=self.current_rendered_window["main_canvas"].bbox("all")
    )
)

self.current_rendered_window["secondary_frame"] = Frame(self.current_rendered_window["main_canvas"])
self.current_rendered_window["main_canvas"].create_window(
    (0, 0),
    window=self.current_rendered_window["secondary_frame"],
    anchor="nw"
)

在上面的代码中,current_rendered_window 是一个字典,每次重新加载窗口时都会绘制它,因此所有框架、画布、小部件等都需要像我在代码中所做的那样添加到其中。

【问题讨论】:

    标签: python tkinter scrollbar


    【解决方案1】:

    需要先打包横向滚动条:

    self.current_rendered_window["main_canvas"] = Canvas(self.current_rendered_window["main_frame"], bg="yellow")
    
    self.current_rendered_window["main_scrollbar"] = ttk.Scrollbar(
        self.current_rendered_window["main_frame"],
        orient=VERTICAL, command=self.current_rendered_window["main_canvas"].yview
    )
    
    self.current_rendered_window["horizontal_scrollbar"] = ttk.Scrollbar(
        self.current_rendered_window["main_frame"],
        orient=HORIZONTAL, command=self.current_rendered_window["main_canvas"].xview
    )
    
    self.current_rendered_window["horizontal_scrollbar"].pack(side=BOTTOM, fill=X)
    self.current_rendered_window["main_canvas"].pack(side=LEFT, fill=BOTH, expand=1)
    self.current_rendered_window["main_scrollbar"].pack(side=RIGHT, fill=Y)
    

    但是,最好使用grid() 而不是pack()

    【讨论】:

      猜你喜欢
      • 2012-11-14
      • 2016-05-28
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 2014-08-27
      • 2023-03-17
      相关资源
      最近更新 更多