pyside / pyqt: forma sencilla de enlazar varios botones que comparten la misma funcionalidad

Soy nuevo en PyQt / PySide.

Tengo un montón de edición de líneas (para mostrar la ubicación del archivo) y para cada línea de texto tengo un botón (para mostrar el cuadro de diálogo de abrir archivo).

Tengo un método:

def selectSelf1(self): """ browse for file dialog """ myDialog = QtGui.QFileDialog self.lineSelf1.setText(myDialog.getOpenFileName()) 

y un botón pulsador está enlazado usando el siguiente código

  self.btnSelf1.clicked.connect(self.selectSelf1) 

Tengo alrededor de 20 de esos botones y 20 de esas ediciones de línea. ¿Hay una manera fácil de enlazar todos esos botones a sus correspondientes ediciones de línea en lugar de escribir todo.

¡Gracias!

Si tiene una lista de Botones y LineEdits, puede usar lo siguiente:

  • QSignalMapper , otra descripción

  • functools.partial , como este:

     def show_dialog(self, line_edit): ... line_edit.setText(...) for button, line_edit in zip(buttons, line_edits): button.clicked.connect(functools.partial(self.show_dialog, line_edit)) 
  • lambda

     for button, line_edit in ...: button.clicked.connect(lambda : self.show_dialog(line_edit)) 

Si está utilizando Qt Designer y no tiene una lista de botones y líneas, pero todos tienen el mismo patrón de denominación, puede utilizar alguna introspección:

 class Foo(object): def __init__(self): self.edit1 = 1 self.edit2 = 2 self.edit3 = 3 self.button1 = 1 self.button2 = 2 self.button3 = 3 def find_attributes(self, name_start): return [value for name, value in sorted(self.__dict__.items()) if name.startswith(name_start)] foo = Foo() print foo.find_attributes('edit') print foo.find_attributes('button')