2014-10-03 49 views
0

我正在用Python构建一个使用GTK 3+的应用程序,并且我在GtkIconView上遇到了问题。当视图中有图标时,我希望能够左右点击图标。单击左键单击即可正常工作,但在右键单击时遇到问题。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)但这似乎没有做任何事情。

回答

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) 

所以在图标的鼠标点击,将导致图标的文字显示,这正是我需要的。

0

首先,设置activate-on-single-click属性不够用?我不认为这在你所关联的问题的任何地方都有提及。

无论如何,你需要从GDK事件(如button-press-event)返回的Python相当于GDK_EVENT_PROPAGATE(无论是),否则其他的事件处理程序(就像是GtkIconView本身的一部分的那些)将无法运行。我假设你遇到了未定义的行为,因为你没有明确地返回任何东西,在这种情况下,未定义的行为是“返回等效于GDK_EVENT_STOP”。

+0

“单击激活”仅适用于左键单击。 – shellcomplex 2014-10-04 15:19:18