2017-08-28 1 views
-1

Comment puis-je modifier le texte d'une étiquette jusqu'à ce qu'un bouton poussoir est cliquée dans pyqt (comment puis-je garder cela à boucle) est le code ici J'ai essayéComment changer le texte de l'étiquette jusqu'à ce que bouton cliqué dans pyqt

 from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(376, 290) 
     MainWindow.setMinimumSize(QtCore.QSize(376, 290)) 
     MainWindow.setMaximumSize(QtCore.QSize(376, 290)) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.pushButton = QtGui.QPushButton(self.centralwidget) 
     self.pushButton.setGeometry(QtCore.QRect(150, 210, 75, 23)) 
     self.pushButton.setObjectName(_fromUtf8("pushButton")) 
     self.label = QtGui.QLabel(self.centralwidget) 
     self.label.setGeometry(QtCore.QRect(140, 70, 91, 31)) 
     self.label.setObjectName(_fromUtf8("label")) 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.statusbar = QtGui.QStatusBar(MainWindow) 
     self.statusbar.setObjectName(_fromUtf8("statusbar")) 
     MainWindow.setStatusBar(self.statusbar) 
     self.i = 1 
     while self.pushButton.clicked: 
      self.count() 
     self.retranslateUi(MainWindow) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 
    def count(self): 
     self.i+=1 
     print self.i 
     self.label.setText(str(self.i)) 

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) 
     self.pushButton.setText(_translate("MainWindow", "PushButton", None)) 
     self.label.setText(_translate("MainWindow", "TextLabel", None)) 


if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication([]) 
    MainWindow = QtGui.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 

J'ai essayé ce code, mais l'interface graphique ne se présente et ne va pas à un loop.so infini, comment faire boucle i ce code correctement

c'est l partie oop et la fonction i conservés

 self.i = 1 
     while self.pushButton.clicked: 
      self.count() 
def count(self): 
     self.i+=1 
     print self.i 
     self.label.setText(str(self.i)) 

merci à l'avance

raajvamsy

+0

Vous souhaitez augmenter le nombre lorsque le bouton est enfoncé et affiché sur le QLabel. J'ai raison? – eyllanesc

+0

non je veux augmenter le nombre jusqu'à ce que le bouton soit cliqué (quand le bouton est cliqué le compte devrait arrêter) –

+0

Essayez ma solution, utilisez le code complet pour le prouver, aussi si vous aidez avec ma réponse ne pas oublier de marquer comme correct. – eyllanesc

Répondre

1

L'interface graphique n'est pas facile avec des boucles car ils ont la boucle principale par défaut: app.exec_(), le plus recommandé dans votre cas est de utilisez un QTimer qui démarre dès que l'application est affichée et s'arrête lorsque vous appuyez sur le bouton.

Je recommande toujours de ne pas modifier le code qui génère Qt Designer, il est préférable de créer une nouvelle classe qui implémente la logique et utiliser la vue générée, tout ce qui précède, je mis en œuvre dans le code suivant:

class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 
    counter = 0 
    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 
     self.setupUi(self) 
     timer = QtCore.QTimer(self) 
     timer.timeout.connect(self.onTimeout) 
     timer.start(10) # 10 milliseconds 
     self.pushButton.clicked.connect(timer.stop) 

    def onTimeout(self): 
     self.counter += 1 
     self.label.setText(str(self.counter))