如何在鼠标点击时获得鼠标位置 - Python Gtk

时间:2012-12-22 11:44:59

标签: python gtk pygtk

我正在写一个关于图论的学校项目。我需要实现一些Graph算法(Dijkstra,Prim等)。之后我需要在同一个程序中将它们可视化。

我可以在绘图区域内绘制矩形和线条,以便可视化图形。但是我需要处理鼠标事件以使其具有交互性。

例如,当用户想要向图表添加顶点时,我需要鼠标的位置。

我的母语不是英语。我无法解释我的问题。 :)

2 个答案:

答案 0 :(得分:2)

使用gtk.EventBox和event'ss xy字段:

import gtk

win  = gtk.Window ()
box  = gtk.EventBox ()
area = gtk.DrawingArea ()

def onclick (box, event):
   print event.x, event.y

box.connect ('button-press-event', onclick)

box.add (area)
win.add (box)
win.show_all ()
win.connect ('destroy', lambda *x: gtk.main_quit ())

gtk.main ()

答案 1 :(得分:0)

这对我也有用 vala。我确实使用了 Gtk.Layout 而不是 Gtk.DrawingArea。 此示例还展示了如何检测双击。

public class MyApp : Gtk.Application {
    public MyApp () {
    }

    protected override void activate () {

        var window = new Gtk.Window ();
        window.set_default_size (300, 400);

        var layout = new Gtk.Layout();
        layout.add (new Gtk.Label ("hello"));

        var eventbox = new Gtk.EventBox();
        eventbox.button_press_event.connect ((event) => {
            var type = event.type;
            string position = event.x.to_string() + "; " + event.y.to_string();
            if (type == Gdk.EventType.2BUTTON_PRESS) {
                print (position + " (Double click)" + "\n");
                return true;
            }
            print (position + "\n");
            return true;
        });
        eventbox.add (layout);
        window.add (eventbox);
        window.show_all ();

        add_window (window);

    }

    public static int main (string[] args) {
        return new MyApp ().run (args);
    }
}

编译代码valac --pkg gtk+-3.0 <file>.vala

执行./<file>

相关问题