2012-05-24 78 views
6

Intento agregar una función en una clase PyQt, pero siempre me devuelve un error.Crear botón dinámico en PyQt

# Error: TypeError: connect() slot argument should be a callable or a signal, not 'NoneType' # 
def commander (self, arg): 
    exec arg  

def aButton (self, layout, **kwargs): 
    name = kwargs.pop("name","Button") 
    command = kwargs.pop("command", "") 
    button = QtGui.QPushButton(name) 
    button.clicked.connect(self.commander(command)) 
    layout.addWidget(button) 
    return button 

puede ser alguien aquí me puede ayudar a resolver ese: ') Thx!

Respuesta

20

se necesita una función:

button.clicked.connect(lambda: self.commander(command)) 

Nota lambda evitará la evaluación de la llamada a la función, lo que va a llamar self.commander(command) sólo cuando se hace clic

+2

bueno 'call' jeje .. –

+0

¡Gracias! funciona ! – MObject

+1

¡está bien! Soy nuevo aquí;) thx nuevamente :) – MObject

2

parece que en

button.clicked.connect(self.commander(command)) 

self.commander(command) regresa None en lugar de una señal o un exigible.

+0

Sí, pero sólo quiero para ejecutar algún código cuando se hace clic en el botón. No entiendo qué tipo de valor necesito devolver. return compile (arg, '', 'exec') Lo intento pero es lo mismo ... – MObject