繁体   English   中英

Tkinter中的画布滚动条问题

[英]Issues with canvas scrollbars in Tkinter

相关代码:

self.propertyListWrapper = ttk.Frame(self.propertyMenu)
self.propertyListWrapper.pack( fill = tk.BOTH, expand = tk.YES )
self.propertyListCanvas = tk.Canvas(self.propertyListWrapper)
self.propertyListCanvas.pack( fill = tk.BOTH, expand = tk.YES, side = tk.LEFT )
self.propertyGrid = ttk.Frame(self.propertyListCanvas)
self.propertyListScrollbar = ttk.Scrollbar(self.propertyListWrapper)
self.propertyListScrollbar.config(command = self.propertyListCanvas.yview)
self.propertyListCanvas.config(yscrollcommand = self.propertyListScrollbar.set)    
self.propertyListScrollbar.pack(side = tk.RIGHT, fill = tk.Y)

...
# where stuff is added to self.propertyGrid
...

self.propertyListCanvas.config( scrollregion = (0, 0, self.propertyGrid.winfo_width(), self.propertyGrid.winfo_height()))
self.propertyListCanvas.create_window((0,0), window = self.propertyGrid, anchor='nw')

这是当前正在发生的事情: 滚动条不起作用。

如您所见,滚动条没有栏。 不太有用。 我究竟做错了什么?

这是简化的Github Gist ,它重复了问题。 应该有20个标签,您应该可以滚动它们,但是不会出现滚动条。

pack的默认设置是在顶部边缘放置一些东西。 打包画布时,您使用的是默认设置,因此它占据了gui的顶部,而在其下方留有空白。 打包滚动条时,您告诉它向右移动,因此它位于画布下方空白区域的右边缘。 如果要并排滚动条和画布,则在右侧都打包,或者在右侧打包一个,在左侧打包一个。

要点的问题是您试图在绘制框架之前获取框架的宽度和高度。 由于框架尚未映射到屏幕(因为尚未将其添加到画布),因此其宽度和高度为1(一)。 您必须先使小部件可见,然后才能测量其宽度和高度。 这意味着将其添加到画布上或将其打包/放置/网格化到可见窗口中,然后等待屏幕重新绘制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM