Tkinter中的画布滚动条问题

时间:2014-12-09 23:37:59

标签: python python-3.x tkinter scrollbar

相关代码:

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')

这是目前正在发生的事情: The scrollbar isn't working.

如您所见,滚动条没有条形图。不是很有用。 我做错了什么?

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

1 个答案:

答案 0 :(得分:0)

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

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