首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是水平边缘滚动的Tkinter事件(在Linux中)?

什么是水平边缘滚动的Tkinter事件(在Linux中)?
EN

Stack Overflow用户
提问于 2017-09-13 18:21:06
回答 2查看 877关注 0票数 0

我有一个带有滚动条的Python Tkinter文本小部件。我想定义我自己的方法,在我的笔记本电脑的触摸板上使用水平边缘滚动。但是,我不知道允许我这样做的事件名称。垂直事件运行良好(按shift键和使用垂直边缘滚动进行水平滚动也是如此)。我要查找的事件名称是什么?它们似乎不是"<Button-6>""<Button-7>",因为它们会产生错误;例如

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

我不确定"<Button-6>"和钥匙有什么关系,但好吧。

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2017-09-13 18:21:06

我研究了与打印常规事件相关的代码,编写了用于按钮按下(不仅仅是按键)的代码,我了解了水平鼠标滚轮的event.num是什么。因此,我采用了以下解决方案:

我不认为水平鼠标滚动有事件名称(如果我错了请告诉我),但确实有事件编号(6表示向左滚动,7表示向右滚动)。虽然"<Button-6>""<Button-7>"似乎不能工作,但在Linux上的Python3.5.3中,Tkinter仍然可以水平边缘滚动(我还没有测试其他东西)。

您需要绑定"<Button>"而不是"<Button-6>""<Button-7>",并创建如下处理程序:

代码语言:javascript
复制
...
    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"

我在if/elif语句的每个部分都做了一个return "break",因为我们不想总是返回" break“并中断其他按钮事件(仅当水平鼠标滚轮滚动时);我的意思是,如果你总是中断,那么常规的左键单击将不再起作用(除非你在里面编程),诸如此类的事情。我只是使用10-10,而不是event.delta/120,因为它会给我以下错误,否则会有一些奇怪的原因,而且只需手动输入数字似乎很有效:

tkinter.TclError: expected integer but got "0.0"

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

票数 2
EN

Stack Overflow用户

发布于 2020-04-26 11:55:40

我只是想在MacOS上补充这一点,因为no where讲述了这一点,我花了相当多的时间进行实验和搜索。event.state从0变为垂直鼠标滚动,1变为水平鼠标滚动。

代码语言:javascript
复制
def mouseScroll(event):
    if event.state == 0:
        canvas.y_viewscroll(-event.delta, "units")
    elif event.state == 1: # you can use just an else as it can only be 0 or 1
        canvas.x_viewscroll(-event.delta, "units")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46194948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档