GtkIconView右键单击激活

时间:2014-10-03 16:34:03

标签: python python-3.x gtk pygtk

我正在使用Python使用GTK 3+构建应用程序,而我遇到GtkIconView时遇到问题。当视图中有图标时,我希望能够左右键单击图标。单击左键可以正常工作,但我无法选择右键单击。

右键单击应显示弹出菜单。我看了https://askubuntu.com/questions/144311/how-to-make-a-gtk-iconview-react-to-single-click-instead-of-double-click

有人建议我使用button_press_event然后继续前进。 以下是关于上述建议的代码:

def on_button_press_event(self, widget, event):
    if event.type == Gdk.EventType.BUTTON_PRESS:
        choice = util.get_selection(.....)
        #get the text of the selected icon

        if event.button == 3:
            print("Right CLick")
            print(choice)
        elif event.button == 1:
            print("LEFT CLICK")
            print(choice)                

在此阶段,当我点击图标时,左右键都不选择图标,因此选项变为[]。只需双击即可选择图标。

无论按钮如何,都可以通过单击选择图标吗?

我添加了GtkIconView.add_events(Gdk.EventMask.BUTTON_PRESS_MASK),但似乎没有做任何事情。

2 个答案:

答案 0 :(得分:0)

首先,设置activate-on-single-click属性是不够的?我不认为在您链接的问题中的任何地方都提到了这一点。

无论如何,你需要从GDK事件(如GDK_EVENT_PROPAGATE)返回Python等价的button-press-event(无论是什么),否则返回其他事件处理程序(比如属于GtkIconView本身的那些) )不会跑。我假设您正在尝试未定义的行为,因为您没有明确地返回任何内容,在这种情况下,未定义的行为是"返回相当于GDK_EVENT_STOP"。

答案 1 :(得分:0)

我设法使用button_press_event来解决问题。

 if event.type == Gdk.EventType.BUTTON_PRESS:
    path = GtkIconView.get_path_at_pos(event.x, event.y)
    if path != None:
        GtkIconView.select_path(path)
        choice = util.get_selection(GtkIconView,GtkListStore)
        if event.button == 3:
            # popup on right click
        elif event.button == 1:
            self.on_GtkIconView_activated(widget,choice)

要通过鼠标点击接收任何信号,您必须添加

GtkIconView.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)

因此,点击图标上的任何鼠标按钮都会显示图标的文字,这就是我需要的。