gpt4 book ai didi

python - 使用 python GTK3 获取 DrawArea 中的鼠标滚轮事件

转载 作者:行者123 更新时间:2023-12-01 09:33:16 24 4
gpt4 key购买 nike

我正在尝试在 Gtk.DrawArea 内获取鼠标轮事件。有人知道如何实现这一目标吗?方法当前从未调用 DrawTest.on_scroll():

#!/usr/bin/env python3                                                                                                                                                                   

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class DrawTest(Gtk.DrawingArea):
def __init__(self):
super(DrawTest, self).__init__()
self.connect("scroll-event", self.on_scroll)

def on_scroll(self, btn, event):
print("Scroll event")
return True


class MainWindow(Gtk.Window):
def __init__(self):
super(MainWindow, self).__init__()
self.connect("destroy", lambda x: Gtk.main_quit())

evtest = DrawTest()

self.add(evtest)
self.show_all()

def run(self):
Gtk.main()

def main(args):
mainwdw = MainWindow()
mainwdw.run()
return 0

if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))

最佳答案

您需要设置或添加 Gtk.DrawingArea 应处理的事件。

只需将这行代码添加到您的 DrawTest 类的 init 方法中即可:

self.set_events (Gdk.EventMask.ALL_EVENTS_MASK)

它应该看起来像这样:

class DrawTest(Gtk.DrawingArea): 
def __init__(self):
super(DrawTest, self).__init__()
self.set_events (Gdk.EventMask.ALL_EVENTS_MASK)
self.connect("scroll-event", self.on_scroll)
...

set_events方法来自 Gtk.Widget 类,它说:

The event mask for a window determines which events will be reported for that window from all master input devices. For example, an event mask including Gdk.EventMask.BUTTON_PRESS_MASK means the window should report button press events. The event mask is the bitwise OR of values from the Gdk.EventMask enumeration.

See the ‘input handling overview [event-masks]’ for details.

为了简单起见,我设置了 ALL_EVENTS_MASK ,更多关于 Gdk.EventMask .

PS:请注意,Gdk.WindowGtk.Window 不同,如果您阅读有关该主题的更多内容,您就会发现。

关于python - 使用 python GTK3 获取 DrawArea 中的鼠标滚轮事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49771402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com