微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Tkinter-如何停止在画布窗口上方滚动

如何解决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 举报,一经查实,本站将立刻删除。