2009-04-10 8 views
1

J'ai un programme GUI,PyQt connecter bug méthode lorsqu'il est utilisé dans une boucle qui crée des widgets à partir d'une liste

Il auto créer des boutons à partir d'une liste de noms, et se connecter à une fonction imprime son nom.

mais quand je lance ce programme, j'appuie sur tous les boutons,

ils reviennent tous le nom du dernier bouton.

Je me demande pourquoi cette chose arrive. quelqu'un peut-il aider?

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import logging 

logging.basicConfig(level=logging.DEBUG,) 

class MainWindow(QWidget): 
    def init(self): 
     names = ('a','b','c') 
     lo = QHBoxLayout(self) 
     for name in names: 
      button = QPushButton(name,self) 
      lo.addWidget(button) 
      self.connect(button,SIGNAL("clicked()"), 
         lambda :logging.debug(name)) 

if __name__=="__main__": 
    app = QApplication(sys.argv) 
    m = MainWindow();m.init();m.show() 
    app.exec_() 

résultat comme:

python t.py 
DEBUG:root:c 
DEBUG:root:c 
DEBUG:root:c 

Répondre

Questions connexes