Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用鼠标滚轮在Tkinter中滚动,如果它';滚动条所在的框架中有什么?_Python_Tkinter_Scrollbar_Tkinter Canvas - Fatal编程技术网

Python 如何使用鼠标滚轮在Tkinter中滚动,如果它';滚动条所在的框架中有什么?

Python 如何使用鼠标滚轮在Tkinter中滚动,如果它';滚动条所在的框架中有什么?,python,tkinter,scrollbar,tkinter-canvas,Python,Tkinter,Scrollbar,Tkinter Canvas,我知道有.bind和.bind\u所有的方法,但它们都有问题。如果使用.bind,则仅当光标位于该帧的空白处时,它才会滚动。如果您使用.bind_all,则无论鼠标位于何处,如果您使用鼠标滚轮,鼠标都会滚动。是否只有当光标在某个帧中时,才可以使用鼠标滚轮滚动它?您可以使用该小部件的和绑定来处理小部件何时应该使用鼠标滚轮滚动 只有当光标移动到小部件上时,才能使用将所有与序列绑定,当光标从小部件上移开时,可以使用序列绑定和解除绑定 看看这个例子 将tkinter作为tk导入 def set_鼠标滚轮

我知道有
.bind
.bind\u所有的
方法,但它们都有问题。如果使用
.bind
,则仅当光标位于该帧的空白处时,它才会滚动。如果您使用
.bind_all
,则无论鼠标位于何处,如果您使用鼠标滚轮,鼠标都会滚动。是否只有当光标在某个帧中时,才可以使用鼠标滚轮滚动它?

您可以使用该小部件的
绑定来处理小部件何时应该使用鼠标滚轮滚动

只有当光标移动到小部件上时,才能使用
将所有
序列绑定,当光标从小部件上移开时,可以使用
序列绑定和解除绑定

看看这个例子

将tkinter作为tk导入
def set_鼠标滚轮(小部件,命令):
“”“启动/停用鼠标滚轮滚动时
光标分别位于/不位于小部件上。”“”
widget.bind(“”,lambda:widget.bind_all(“”,command))
widget.bind(“”,lambda:widget.unbind_all(“”))
root=tk.tk()
根几何体('300x300')
l0=tk.Label(root,text='在标签上悬停并滚动!')
l0.pack(padx=10,pady=10)
l1=tk.标签(根,文本为0',背景为粉红色',宽度为10,高度为5)
l1.包装(pady=10)
设置鼠标滚轮(l1,lambda e:l1.config(text=e.delta))
l2=tk.Label(根,text='0',bg='青色',宽度=10,高度=5)
l2.包装(pady=10)
设置鼠标滚轮(l2,lambda e:l2.config(text=e.delta))
root.mainloop()
这个例子非常适用于用canvas创建的可滚动框架,由于画布内的主框架有多个小部件,如果我们不使用
bind\u all
over
bind
,那么如果光标移动到可滚动框架内的小部件上,滚动将不起作用。

您可以使用该小部件的
绑定来处理小部件何时应该有鼠标滚轮滚动

只有当光标移动到小部件上时,才能使用
将所有
序列绑定,当光标从小部件上移开时,可以使用
序列绑定和解除绑定

看看这个例子

将tkinter作为tk导入
def set_鼠标滚轮(小部件,命令):
“”“启动/停用鼠标滚轮滚动时
光标分别位于/不位于小部件上。”“”
widget.bind(“”,lambda:widget.bind_all(“”,command))
widget.bind(“”,lambda:widget.unbind_all(“”))
root=tk.tk()
根几何体('300x300')
l0=tk.Label(root,text='在标签上悬停并滚动!')
l0.pack(padx=10,pady=10)
l1=tk.标签(根,文本为0',背景为粉红色',宽度为10,高度为5)
l1.包装(pady=10)
设置鼠标滚轮(l1,lambda e:l1.config(text=e.delta))
l2=tk.Label(根,text='0',bg='青色',宽度=10,高度=5)
l2.包装(pady=10)
设置鼠标滚轮(l2,lambda e:l2.config(text=e.delta))
root.mainloop()

这个例子非常适用于用canvas创建的可滚动框架,因为canvas中的主框架有多个小部件,如果我们不使用
bind\u all
over
bind
,那么如果光标移动到可滚动框架中的小部件上,滚动将不起作用。

通常使用
bind()
在需要并支持滚动的小部件上
Frame
不是一个支持滚动的小部件。我指的不是Frame小部件中的Frame。我的意思是它通常是框架小部件(例如Canvas和LabelFrame)。此外,将.bind()与画布一起使用也可以对框架执行相同的操作。滚动条正在工作,这不是绑定。您需要在希望鼠标滚轮滚动的所有小部件(例如,在画布中滚动的框架中的标签)上使用
。在需要和支持滚动的小部件上通常使用
bind()
Frame
不是一个支持滚动的小部件。我指的不是Frame小部件中的Frame。我的意思是它通常是框架小部件(例如Canvas和LabelFrame)。此外,将.bind()与画布一起使用也可以对框架执行相同的操作。滚动条正在工作,这不是绑定。您需要在所有要使用鼠标滚轮滚动的小部件上使用
.bind
(例如,框架中的标签在画布中滚动)。谢谢。这完美地回答了我的问题。完全被低估了,非常有用的答案,干杯@Saad!非常感谢。这完美地回答了我的问题。完全被低估了,非常有用的答案,干杯@Saad!