这是我在stackoverflow中的第一篇文章。我一直在努力学习Python,这里的社区非常有帮助(问题和答案)。我尝试编写一个滚动条,可以在窗口大小发生变化时自动调整其大小。我已经有了一个工作滚动条,但只有当我将小部件添加到画布时才会工作,而不是在我调整画布大小时。
我知道在tkinter中添加一个滚动条可能有点棘手,所以我只是想知道是否可以这样做。
非常感谢你的帮助。
这是我用来创建滚动条的代码示例。如果您需要更多详细信息,请与我们联系: - )
if sys.platform == 'darwin':
self.canvas1 = Canvas(master, borderwidth = 0, width = 400)
else:
self.canvas1 = Canvas(master, borderwidth = 0)
self.canvas1.grid(row = 0 , column = 0, sticky= N )
if sys.platform == "win32":
self.canvas1.bind_all("<MouseWheel>", self._OnMouseWheel)
else:
self.canvas1.bind('<Button-4>',self._OnMouseWheel)
self.canvas1.bind('<Button-5>',self._OnMouseWheel)
self.leftframe = Frame(self.canvas1)
self.leftframe.bind("<Configure>", self.onFrameConfigure)
self.vsb = Scrollbar(master, orient="vertical" ,activebackground = 'black', command=self.canvas1.yview)
self.canvas1.configure(yscrollcommand = self.vsb.set, height = 600)
self.vsb.grid(row = 0 , column = 0 , sticky = N+S+E)
self.canvas1.create_window((4,4), window=self.leftframe, anchor="nw", tags="self.leftframe")
以下是我使用过的两个附加功能:
def onFrameConfigure(self, event):
self.canvas1.configure(scrollregion=self.canvas1.bbox("all"))
def _OnMouseWheel(self,event):
if sys.platform == "win32":
self.canvas1.yview_scroll(-1*(event.delta),"units")
else:
if event.num == 4:
self.canvas1.yview('scroll', -1, 'units')
elif event.num == 5:
self.canvas1.yview('scroll', 1, 'units')