我试图在Gtk.DrawArea中获取 mousewheel 事件。 有人知道如何实现这一目标吗?方法 目前从不调用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))
答案 0 :(得分:1)
您需要设置或添加Gtk.DrawingArea应处理的事件。
只需在init方法中将这行代码添加到DrawTest类中:
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类,它说:
窗口的事件掩码确定将报告哪些事件 来自所有主输入设备的该窗口。例如,一个事件 掩码包括Gdk.EventMask.BUTTON_PRESS_MASK意味着窗口应该 报告按钮新闻事件。事件掩码是值的按位OR 来自Gdk.EventMask枚举。
有关详细信息,请参阅“输入处理概述[event-masks]”。
为简单起见,我已在ALL_EVENTS_MASK
上设置Gdk.EventMask,更多内容。
PS:请注意,Gdk.Window
与Gtk.Window
不同,如果您阅读有关该主题的更多内容,您会看到。