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

时间:2018-04-11 09:28:27

标签: python gtk3

我试图在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))

1 个答案:

答案 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.WindowGtk.Window不同,如果您阅读有关该主题的更多内容,您会看到。