2012-01-10 100 views
0

我有10個按鈕,它們對應於相同的方法。我將如何檢查在相應的方法中點擊了哪個按鈕?我試圖檢查列表中通過下面的代碼特定按鈕的按下按鈕,但我得到分段錯誤:檢查哪個按鈕被按下gtk3使用python

for i in range(0,10): 
    if button_list[i].clicked(): 
     break 
break 
#operation with respect to the button clicked 
+0

發佈您的事件處理程序。所有GtkWidget事件處理程序中的第一個參數應該是發佈事件的小部件的句柄。 – eduffy 2012-01-10 19:32:46

回答

0

一旦你連接所有的按鈕相同的回調,我認爲回調將具有此簽名:callback(button)其中button是發出clicked信號的按鈕。

內部的回調應該是很容易檢查使用類似的哪個按鈕被點擊:

button_list.index(button) 

這將返回列表內的按鈕的索引。

+0

我沒有得到'按鈕'的用法。並沒有完全得到它是什麼 – 2012-01-10 20:36:38

+0

@GauravSood每個gtk回調中存在的參數是發出信號的小部件。對於'clicked'信號,這將是被點擊的按鈕。因此,你的回調將總是得到一個被點擊的按鈕的引用,它可以用來檢查'button_list'所在的位置。 – jcollado 2012-01-10 20:39:10

+0

好的。所以我必須檢索按下按鈕的索引,如下面的代碼: index = button_list.index() – 2012-01-10 20:44:54

3

Here's a sample code,說明知道通過使用按鈕的標籤是什麼按鈕觸發事件:

from gi.repository import Gtk 

class ButtonWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="Button Demo") 
     self.set_border_width(10) 

     hbox = Gtk.Box(spacing=6) 
     self.add(hbox) 

     #Lets create 10 buttons for this demo 
     #You could create and set the label for 
     #each of the buttons one by one 
     #but in this case we just create 10 
     #and call them Button0 to Button9 
     for i in range(10): 

      name = "Button{}".format(i) 
      button = Gtk.Button(name) 
      button.connect("clicked", self.on_button_clicked) 
      hbox.pack_start(button, True, True, 0) 


    def on_button_clicked(self, button): 
     print button.get_label() 

    def on_close_clicked(self, button): 
     print "Closing application" 
     Gtk.main_quit() 

win = ButtonWindow() 
win.connect("delete-event", Gtk.main_quit) 
win.show_all() 
Gtk.main() 

所以你可以只檢查標籤是什麼,並採取相應的行動。

+0

歡迎來到SO。雖然在您的答案中粘貼代碼是一種很好的做法,但提供對原始線程的引用非常重要。首先,它表示對撰寫作者的作者的尊重。此外,如果有更多信息,人們可以跟隨鏈接。 :)我建議你看看我們的FAQ:http://stackoverflow.com/faq – ForceMagic 2012-11-06 23:29:46

+1

謝謝。粘貼的代碼真的是我的。鏈接到gtk3文檔只是鏈接到如何在gtk3中使用python按鈕的示例。乾杯! – jnvilo 2012-11-07 15:56:33

+0

哦,太好了,那麼對不起。我已經編輯了您的文章,以添加鏈接到文檔。您可以再次編輯它以指定它指向gtk3文檔。你可以通過點擊「編輯」鏈接來實現這一點,你可以隨時編輯自己的帖子。像你這樣的好答案,你將快速獲得聲望,你會看到你可以在這裏做很多事情。這就是爲什麼我給你提供常見問題的另一個原因;)祝你有美好的一天 - 關心。 – ForceMagic 2012-11-07 17:43:38