在PyGtk中使用DrawingArea处理鼠标事件

3 投票
1 回答
1900 浏览
提问于 2025-04-18 08:01

我想在点击一个绘图区域时获取X和Y坐标。我在找一些例子的时候,发现了下面这样的代码:

import gtk

class Ventana(gtk.Window):

    def __init__(self):
        super(Ventana, self).__init__()

        self.set_title('Test')
        self.set_size_request(800, 600)
        self.set_position(gtk.WIN_POS_CENTER)
        self.connect('destroy', gtk.main_quit)

        self.drawing_area = gtk.DrawingArea()
        self.drawing_area.set_size_request(780, 500)
        self.drawing_area.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('white'))
        self.drawing_area.connect('button-press-event', self.on_drawing_area_button_press)

        fixed = gtk.Fixed()
        fixed.put(self.drawing_area, 10, 10)

        self.add(fixed)

        self.show_all()

    def on_drawing_area_button_press(self, widget, event):
        print event.x, ' ', event.y


def main():
    Ventana()
    gtk.main()

if __name__ == '__main__':
    main()

当我运行这段代码时,窗口会出现,绘图区域的背景是白色的。但是当我点击这个区域时,它并没有打印出event.xevent.y的值,而且也没有任何错误信息。

有没有人能告诉我正确的做法是什么?

谢谢大家的回答。

1 个回答

3

绘图区域需要设置事件掩码,这样才能连接你想要处理的事件。

self.drawing_area.set_events(gtk.gdk.BUTTON_PRESS_MASK)

可以参考这个链接:http://www.pygtk.org/pygtk2tutorial/sec-EventHandling.html(页面底部还有一个不错的例子)

撰写回答