python - 用于水平边缘滚动(在 Linux 中)的 Tkinter 事件是什么?

标签 python linux events tkinter mousewheel

我有一个带有滚动条的 Python Tkinter Text 小部件。我想定义自己的方法,在笔记本电脑的触摸板上使用水平边缘滚动。但是,我不知道允许我执行此操作的事件名称。垂直事件工作正常(按 Shift 并使用垂直边缘滚动进行水平滚动也是如此)。我正在寻找的事件名称是什么?他们似乎不是"<Button-6>""<Button-7>" ,因为这些会产生错误;例如

_tkinter.TclError: specified keysym "6" for non-key event

我不知道什么"<Button-6>"与 key 有关,但是没关系。

我使用的是 Linux(我这样说是因为 Linux 上的垂直滚动事件与 Windows 上的不同)。我知道如何通过按键发现未知事件名称,但我也不知道如何使用触摸板来做到这一点。

查看文本小部件的事件列表似乎并不是特别有见地(除此之外,我没有看到看起来像水平鼠标滚轮的事件)。

我在 Linux(Xubuntu 17.04,64 位)上使用 Python 3.5.3。

最佳答案

我研究了与打印一般事件相关的代码,编写了针对按钮按下(不仅仅是按键)执行此操作的代码,我看到了什么 event.num用于水平鼠标滚轮。所以,我做了以下解决方案:

我认为水平鼠标滚动没有事件名称(如果我错了请告诉我),但似乎有事件编号(向左滚动为 6,向右滚动为 7)。而"<Button-6>""<Button-7>"似乎不起作用,在 Linux 上的 Python 3.5.3 中的 Tkinter 中,水平边缘滚动仍然是可能的(我没有测试过其他任何东西)。

您需要绑定(bind)"<Button>"而不是"<Button-6>""<Button-7>" ,并创建一个像这样的处理程序:

...
    self.bind("<Button>", self.touchpad_events)
...

def touchpad_events(self, event):
    if event.num==6:
        self.xview_scroll(-10, "units")
        return "break"
    elif event.num==7:
        self.xview_scroll(10, "units")
        return "break"

我做了一个return "break"在 if/elif 语句的每个部分中,因为我们不想一直返回“break”并中断其他按钮事件(仅当水平鼠标滚轮滚动时);我的意思是,如果你一直打破常规的左键单击将不再起作用(除非你对其进行编程),诸如此类的东西。我就是这样做10-10而不是event.delta/120因为它会给我以下错误,否则由于某些奇怪的原因,并且仅手动输入数字似乎效果很好:

tkinter.TclError: expected integer but got "0.0"

无论如何,我测试了这个解决方案并且它有效。问题解决了。 :)

关于python - 用于水平边缘滚动(在 Linux 中)的 Tkinter 事件是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46194948/

相关文章:

python - 在 Tkinter 文本小部件中粘贴

linux - WebStorm 找不到文件,在终端打开 WebStorm

c - 使用 sendfile(),是否可以判断 in_fd 何时处于 EOF?

sql - 使用 BigQuery 中的事件时间戳检测事件之间的 30 天(或更长)间隔

delphi - 阻止运行主窗体的OnActivate事件

python - Python:最准确的播放时间播放声音样本的方式

python - 在 Python 中处理大量数据

python - 电子邮件和数字的拆分列表,以电子邮件为键和自动递增的数值构造字典

linux - 如何在 sed 中指定 "or"

javascript - 点击目标