我正在使用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)
,但似乎没有做任何事情。
答案 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)
因此,点击图标上的任何鼠标按钮都会显示图标的文字,这就是我需要的。