我有10個按鈕,它們對應於相同的方法。我將如何檢查在相應的方法中點擊了哪個按鈕?我試圖檢查列表中通過下面的代碼特定按鈕的按下按鈕,但我得到分段錯誤:檢查哪個按鈕被按下gtk3使用python
for i in range(0,10):
if button_list[i].clicked():
break
break
#operation with respect to the button clicked
我有10個按鈕,它們對應於相同的方法。我將如何檢查在相應的方法中點擊了哪個按鈕?我試圖檢查列表中通過下面的代碼特定按鈕的按下按鈕,但我得到分段錯誤:檢查哪個按鈕被按下gtk3使用python
for i in range(0,10):
if button_list[i].clicked():
break
break
#operation with respect to the button clicked
一旦你連接所有的按鈕相同的回調,我認爲回調將具有此簽名:callback(button)
其中button
是發出clicked
信號的按鈕。
內部的回調應該是很容易檢查使用類似的哪個按鈕被點擊:
button_list.index(button)
這將返回列表內的按鈕的索引。
我沒有得到'按鈕'的用法。並沒有完全得到它是什麼 – 2012-01-10 20:36:38
@GauravSood每個gtk回調中存在的參數是發出信號的小部件。對於'clicked'信號,這將是被點擊的按鈕。因此,你的回調將總是得到一個被點擊的按鈕的引用,它可以用來檢查'button_list'所在的位置。 – jcollado 2012-01-10 20:39:10
好的。所以我必須檢索按下按鈕的索引,如下面的代碼: index = button_list.index() – 2012-01-10 20:44:54
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()
所以你可以只檢查標籤是什麼,並採取相應的行動。
歡迎來到SO。雖然在您的答案中粘貼代碼是一種很好的做法,但提供對原始線程的引用非常重要。首先,它表示對撰寫作者的作者的尊重。此外,如果有更多信息,人們可以跟隨鏈接。 :)我建議你看看我們的FAQ:http://stackoverflow.com/faq – ForceMagic 2012-11-06 23:29:46
謝謝。粘貼的代碼真的是我的。鏈接到gtk3文檔只是鏈接到如何在gtk3中使用python按鈕的示例。乾杯! – jnvilo 2012-11-07 15:56:33
哦,太好了,那麼對不起。我已經編輯了您的文章,以添加鏈接到文檔。您可以再次編輯它以指定它指向gtk3文檔。你可以通過點擊「編輯」鏈接來實現這一點,你可以隨時編輯自己的帖子。像你這樣的好答案,你將快速獲得聲望,你會看到你可以在這裏做很多事情。這就是爲什麼我給你提供常見問題的另一個原因;)祝你有美好的一天 - 關心。 – ForceMagic 2012-11-07 17:43:38
發佈您的事件處理程序。所有GtkWidget事件處理程序中的第一個參數應該是發佈事件的小部件的句柄。 – eduffy 2012-01-10 19:32:46