tkinter中的滚动条可在窗口大小发生变化时自动调整其大小

时间:2016-05-24 19:31:49

标签: python user-interface tkinter resize scrollbar

这是我在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')

0 个答案:

没有答案