2012-01-10 63 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