2012-05-24 3 views
6

Cerco di aggiungere una funzione in una classe PyQt, ma mi restituisce sempre un errore.Crea pulsante dinamico in 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 

può essere qualcuno qui mi può aiutare a risolvere che: ') Thx!

risposta

20

È bisogno di una funzione:

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

Nota lambda eviterà la valutazione della chiamata di funzione, in modo che chiameremo self.commander(command) solo quando si fa clic

+2

buon 'call' hehe .. –

+0

Grazie! Funziona ! – MObject

+1

okay! Sono nuovo qui;) grazie ancora :) – MObject

2

risulta che in

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

self.commander(command) sta tornando None invece di un segnale o un richiamabile.

+0

Sì, ma voglio solo eseguire del codice quando si fa clic sul pulsante. Non capisco che tipo di valore ho bisogno di restituire. return compile (arg, '', 'exec') Lo provo ma è lo stesso ... – MObject