为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用鼠标滚轮在 Tkinter 中滚动,如果它在滚动条所在的框架中?

如何使用鼠标滚轮在 Tkinter 中滚动,如果它在滚动条所在的框架中?

慕的地10843 2023-04-25 16:47:34
我知道有.bind和.bind_all方法,但是这两个都有问题。如果您使用.bind,它只会在您的光标位于该框架的空白处时滚动。如果您使用.bind_all, 鼠标所在的任何位置,如果您使用鼠标滚轮,它就会滚动。有没有办法只有当光标在某个帧中时才用鼠标滚轮滚动它?
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

您可以使用<Enter>和<Leave>绑定该小部件来处理小部件何时应该滚动鼠标滚轮。


通过仅当光标移动到该小部件上时使用bind_allwith<MouseWheel><Enter> sequence 可以使用序列检查bind 和 unbinding<MouseWheel>当光标从小部件移开时。


看看这个例子。


import tkinter as tk



def set_mousewheel(widget, command):

    """Activate / deactivate mousewheel scrolling when 

    cursor is over / not over the widget respectively."""

    widget.bind("<Enter>", lambda _: widget.bind_all('<MouseWheel>', command))

    widget.bind("<Leave>", lambda _: widget.unbind_all('<MouseWheel>'))



root = tk.Tk()

root.geometry('300x300')


l0 = tk.Label(root, text='Hover and scroll on the labels.')

l0.pack(padx=10, pady=10)


l1 = tk.Label(root, text='0', bg='pink', width=10, height=5)

l1.pack(pady=10)

set_mousewheel(l1, lambda e: l1.config(text=e.delta))


l2 = tk.Label(root, text='0', bg='cyan', width=10, height=5)

l2.pack(pady=10)

set_mousewheel(l2, lambda e: l2.config(text=e.delta))


root.mainloop()

此示例适用于使用画布创建的可滚动框架,因为画布内的主框架有多个小部件,如果我们不使用bind_alloverbind则当光标移到该可滚动框架内的小部件上时,滚动将不起作用。


查看完整回答
反对 回复 2023-04-25
  • 1 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信