如何解决Tkinter-如何停止在画布窗口上方滚动
我有一个可滚动的框架,鼠标滚轮可以滚动,但是当框架小于画布时,我可以在其上方滚动-如何将框架保持在画布的顶部?
这是该代码的最低版本:
import tkinter as tk
class Gui:
def __init__(self,master):
self.root = master
self.canvas = tk.Canvas(self.root)
self.frame = tk.Frame(self.canvas,bg='white')
self.scroll = tk.Scrollbar(self.canvas,orient='vertical',command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.scroll.set)
self.scroll.pack(side='right',fill='y')
self.canvas.place(relheight=1,relwidth=0.85,relx=0.15)
self.canvas_frame = self.canvas.create_window((0,0),window=self.frame,anchor='nw')
self.frame.bind('<Configure>',self.onFrameConfigure)
self.canvas.bind_all('<MouseWheel>',lambda event: self.canvas.yview_scroll(int(-1*(event.delta/120)),'units'))
self.addToFrame()
def onFrameConfigure(self,event):
self.canvas.configure(scrollregion=self.canvas.bBox('all'))
def addToFrame(self):
self.label = tk.Label(self.frame,text='Label')
self.label.pack()
if __name__ == "__main__":
root = tk.Tk()
gui = Gui(root)
root.mainloop()
解决方法
您可以定义自己的final
方法,该方法仅在看不到画布的全部内容时才进行滚动。为此,我使用了yview()
,如果所有画布内容均可见,则返回self.canvas.yview()
。然后,我将自定义的(0.0,1.0)
方法既用作滚动条命令,又用于鼠标滚轮绑定。
yview()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。