我正在使用下面的代码在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
是一个字典,每次重新加载窗口时都会绘制一个字典,因此需要像我在代码中所做的那样将所有框架,画布,小部件等添加到其中。
您需要先打包水平滚动条:
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()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句