Как добавить дополнительные аргументы для button.connect в PyGTK? - PullRequest
4 голосов
/ 29 декабря 2010

Я хочу передать 2 экземпляра ComboBox в метод и использовать их там (например, распечатать их активный выбор).У меня есть что-то похожее на следующее:

class GUI():
  ...

  def gui(self):
    ...
    combobox1 = gtk.combo_box_new_text()
    # code for inserting some values into the combobox
    combobox2 = gtk.combo_box_new_text()
    # code for inserting some values into the combobox
    btn_new = gtk.Button("new")
    btn_new.connect("clicked", self.comboprint)

  def comboprint(self):
    # do something with the comboboxes - print what is selected, etc.

Как я могу передать combobox1 и combobox2 методу "comboprint", чтобы я мог использовать их там?Делать их полями классов (self.combobox1, self.combobox2) - единственный способ сделать это?

Ответы [ 2 ]

10 голосов
/ 29 декабря 2010

сделать что-то вроде этого:

btn_new.connect("clicked", self.comboprint, combobox1, combobox2)

и в вашем обратном вызове comboprint должно быть что-то вроде этого:

def comboprint(self, widget, *data):
    # Widget = btn_new
    # data = [clicked_event, combobox1, combobox2]
    ...  
1 голос
/ 29 декабря 2010

Я бы решил это по-другому, создав переменные класса combobox1 и combobox2, например:

class GUI():
  ...

  def gui(self):
    ...
    self.combobox1 = gtk.combo_box_new_text()
    # code for inserting some values into the combobox
    self.combobox2 = gtk.combo_box_new_text()
    # code for inserting some values into the combobox
    btn_new = gtk.Button("new")
    btn_new.connect("clicked", self.comboprint)

  def comboprint(self):
    # do something with the comboboxes - print what is selected, etc.
    self.combobox1.do_something

Преимущество этого состоит в том, что когда другой функции нужно что-то делать с этими списками, они могут это делать без необходимости передавать эти списки в качестве параметров для каждой функции.

...