2011-04-28 100 views

回答

9

連接到EventBox上的button-press-event信號。

+0

爲什麼按鈕按?線程創建者談論鼠標點擊,而不是按下按鈕 – fnc12 2015-04-06 13:51:07

+1

哦,紐約賭注。它出現按鈕意味着鼠標按鈕。對不起 – fnc12 2015-04-06 13:52:39

+0

在我的測試中,標籤專門顯示消費'button-press-event';我在使用其他小部件上的信號方面沒有問題; :\怪異。其他意見建議一個Gtk.EventBox是標籤所必需的。 – ThorSummoner 2016-02-12 07:32:43

0

連接到按鈕事件信號,但直接在GtkLabel上。我會說你不需要這裏的事件箱,因爲GtkLable已經從GtkWidget繼承了這個信號。要使GtkLabel能夠接收這些事件,您需要先撥打gtk_widget_set_eventsgtk_widget_add_events,並將靈敏度添加到GDK_BUTTON_PRESS_MASK事件中。

+3

並非所有的GTK小部件都可以接收事件。 'GtkLabel'就是其中的一個,它需要被包裝在一個事件框中。請參閱PyGTK FAQ中的這個問題:http://faq.pygtk.org/index.py?query=eventbox&querytype=simple&req=search – ptomato 2011-04-29 08:56:33

+0

然而,關於GDK掩碼的一點可能對其他窗口小部件有用。 – 2016-02-12 12:56:44

7

Gtk#區分小工具和「容器」。放置在Gtk#表單上的大多數小部件都不會接收鼠標點擊事件。爲了接收鼠標事件,你需要將控件放置一個特殊容器內 - 象事件盒:

  1. 添加事件盒containter到表單中。您可以將其放置在其他Widget之後,或者因爲它不可見,除非您專門選擇它(或更改其背景色)。

  2. 將您的標籤小部件放入此EventBox中。注意標籤將獲得EventBox的形狀和大小。

  3. 將「ButtonPressEvent」信號添加到「常用Widget信號」中。

如果您需要標識同時處理該事件的是被點擊的按鈕,在使用UINT值:args.Event.Button典型的「1」將是鼠標左鍵,「2」中心按鈕和'3'右邊的按鈕('2'也可以是左右鍵都被點擊的情況)。

0

看來你根本不需要EventBox:因爲問題是標籤沒有任何關聯的X11窗口,只需要給它一個set_has_window(True)!對我來說,以下工作:

self.label = Gtk.Label() 
    self.label.set_has_window(True) 
    self.label.set_events(Gdk.EventMask.BUTTON_PRESS_MASK) 
    self.label.connect("button-press-event", self.click_label) 

documentation說,它應該只用於實現部件 - 但是,嘿,它的工作原理。誰在乎「應該」?