Partage
  • Partager sur Facebook
  • Partager sur Twitter

[PyQT4] Lancer la même action via les pushButtons

Sujet résolu
Anonyme
    8 mars 2013 à 11:50:41

    Salut à tous.Je débute en Python et je viens de me mettre à PyQT.

    Je suis pour le moment entrain de créer une interface graphique afin de faire un Jeu du Pendu. Quand QT Creator, j'ai placer 26 pushButtons qui correspondent à chaque lettres de l'alphabet.

    Je cherche maintenant, que lorsque quelqu'un clique sur un bouton, le Label du bouton soit affiché dans ma fenêtre. (afin de faire des test)

    Le problème, c'est que je ne sais pas comment procéder. Je sais comment faire pour un bouton précis, mais comment rendre la méthode "universelle" pour les 26 boutons présents ? Est-ce possible, ou faut-t-il copier 26 fois la même ligne en changeant le nom du bouton ?

      Main.py

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    from PyQt4 import QtGui as Gui, QtCore
    import sys
    from Widget import Ui_widget
    
    " Gestion de la fenêtre principale "
    class Window(Gui.QWidget):
    	def __init__(self,title = "Default", parent = None):
    		super(Window, self).__init__(parent)
    		self.initGui()
    		self.setWindowTitle(str(title))
    
    	def getPushButtonText(self):
    		print(self.ui.pushButton.text()) # Print letter A
    
    	def initGui(self):
    		self.ui = Ui_widget()
    		self.ui.setupUi(self)
    
    		self.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.getPushButtonText) #Button 1 => Letter A
    
    if __name__ == "__main__":
    	app = Gui.QApplication(sys.argv)
    	win = Window('Jeu du Pendu')
    	win.show()
    	sys.exit(app.exec_())
    


    Widget.py:

    # -*- coding: utf-8 -*-
    
    # Form implementation generated from reading ui file 'widget.ui'
    #
    # Created: Thu Mar  7 20:49:43 2013
    #      by: PyQt4 UI code generator 4.10
    #
    # WARNING! All changes made in this file will be lost!
    
    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_widget(object):
        def setupUi(self, widget):
            widget.setObjectName(_fromUtf8("widget"))
            widget.resize(608, 503)
            widget.setMinimumSize(QtCore.QSize(608, 503))
            widget.setMaximumSize(QtCore.QSize(608, 503))
            self.clavier = QtGui.QWidget(widget)
            self.clavier.setGeometry(QtCore.QRect(90, 400, 411, 91))
            self.clavier.setObjectName(_fromUtf8("clavier"))
            self.pushButton = QtGui.QPushButton(self.clavier)
            self.pushButton.setGeometry(QtCore.QRect(10, 10, 31, 31))
            self.pushButton.setObjectName(_fromUtf8("pushButton"))
            self.pushButton_2 = QtGui.QPushButton(self.clavier)
            self.pushButton_2.setGeometry(QtCore.QRect(40, 10, 31, 31))
            self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
            self.pushButton_3 = QtGui.QPushButton(self.clavier)
            self.pushButton_3.setGeometry(QtCore.QRect(70, 10, 31, 31))
            self.pushButton_3.setObjectName(_fromUtf8("pushButton_3"))
            self.pushButton_4 = QtGui.QPushButton(self.clavier)
            self.pushButton_4.setGeometry(QtCore.QRect(100, 10, 31, 31))
            self.pushButton_4.setObjectName(_fromUtf8("pushButton_4"))
            self.pushButton_5 = QtGui.QPushButton(self.clavier)
            self.pushButton_5.setGeometry(QtCore.QRect(130, 10, 31, 31))
            self.pushButton_5.setObjectName(_fromUtf8("pushButton_5"))
            self.pushButton_6 = QtGui.QPushButton(self.clavier)
            self.pushButton_6.setGeometry(QtCore.QRect(160, 10, 31, 31))
            self.pushButton_6.setObjectName(_fromUtf8("pushButton_6"))
            self.pushButton_7 = QtGui.QPushButton(self.clavier)
            self.pushButton_7.setGeometry(QtCore.QRect(190, 10, 31, 31))
            self.pushButton_7.setObjectName(_fromUtf8("pushButton_7"))
            self.pushButton_8 = QtGui.QPushButton(self.clavier)
            self.pushButton_8.setGeometry(QtCore.QRect(220, 10, 31, 31))
            self.pushButton_8.setObjectName(_fromUtf8("pushButton_8"))
            self.pushButton_9 = QtGui.QPushButton(self.clavier)
            self.pushButton_9.setGeometry(QtCore.QRect(250, 10, 31, 31))
            self.pushButton_9.setObjectName(_fromUtf8("pushButton_9"))
            self.pushButton_10 = QtGui.QPushButton(self.clavier)
            self.pushButton_10.setGeometry(QtCore.QRect(280, 10, 31, 31))
            self.pushButton_10.setObjectName(_fromUtf8("pushButton_10"))
            self.pushButton_11 = QtGui.QPushButton(self.clavier)
            self.pushButton_11.setGeometry(QtCore.QRect(310, 10, 31, 31))
            self.pushButton_11.setObjectName(_fromUtf8("pushButton_11"))
            self.pushButton_12 = QtGui.QPushButton(self.clavier)
            self.pushButton_12.setGeometry(QtCore.QRect(340, 10, 31, 31))
            self.pushButton_12.setObjectName(_fromUtf8("pushButton_12"))
            self.pushButton_13 = QtGui.QPushButton(self.clavier)
            self.pushButton_13.setGeometry(QtCore.QRect(370, 10, 31, 31))
            self.pushButton_13.setObjectName(_fromUtf8("pushButton_13"))
            self.pushButton_14 = QtGui.QPushButton(self.clavier)
            self.pushButton_14.setGeometry(QtCore.QRect(250, 50, 31, 31))
            self.pushButton_14.setObjectName(_fromUtf8("pushButton_14"))
            self.pushButton_15 = QtGui.QPushButton(self.clavier)
            self.pushButton_15.setGeometry(QtCore.QRect(340, 50, 31, 31))
            self.pushButton_15.setObjectName(_fromUtf8("pushButton_15"))
            self.pushButton_16 = QtGui.QPushButton(self.clavier)
            self.pushButton_16.setGeometry(QtCore.QRect(220, 50, 31, 31))
            self.pushButton_16.setObjectName(_fromUtf8("pushButton_16"))
            self.pushButton_17 = QtGui.QPushButton(self.clavier)
            self.pushButton_17.setGeometry(QtCore.QRect(40, 50, 31, 31))
            self.pushButton_17.setObjectName(_fromUtf8("pushButton_17"))
            self.pushButton_18 = QtGui.QPushButton(self.clavier)
            self.pushButton_18.setGeometry(QtCore.QRect(10, 50, 31, 31))
            self.pushButton_18.setObjectName(_fromUtf8("pushButton_18"))
            self.pushButton_19 = QtGui.QPushButton(self.clavier)
            self.pushButton_19.setGeometry(QtCore.QRect(280, 50, 31, 31))
            self.pushButton_19.setObjectName(_fromUtf8("pushButton_19"))
            self.pushButton_20 = QtGui.QPushButton(self.clavier)
            self.pushButton_20.setGeometry(QtCore.QRect(310, 50, 31, 31))
            self.pushButton_20.setObjectName(_fromUtf8("pushButton_20"))
            self.pushButton_21 = QtGui.QPushButton(self.clavier)
            self.pushButton_21.setGeometry(QtCore.QRect(160, 50, 31, 31))
            self.pushButton_21.setObjectName(_fromUtf8("pushButton_21"))
            self.pushButton_22 = QtGui.QPushButton(self.clavier)
            self.pushButton_22.setGeometry(QtCore.QRect(100, 50, 31, 31))
            self.pushButton_22.setObjectName(_fromUtf8("pushButton_22"))
            self.pushButton_23 = QtGui.QPushButton(self.clavier)
            self.pushButton_23.setGeometry(QtCore.QRect(130, 50, 31, 31))
            self.pushButton_23.setObjectName(_fromUtf8("pushButton_23"))
            self.pushButton_24 = QtGui.QPushButton(self.clavier)
            self.pushButton_24.setGeometry(QtCore.QRect(190, 50, 31, 31))
            self.pushButton_24.setObjectName(_fromUtf8("pushButton_24"))
            self.pushButton_25 = QtGui.QPushButton(self.clavier)
            self.pushButton_25.setGeometry(QtCore.QRect(370, 50, 31, 31))
            self.pushButton_25.setObjectName(_fromUtf8("pushButton_25"))
            self.pushButton_26 = QtGui.QPushButton(self.clavier)
            self.pushButton_26.setGeometry(QtCore.QRect(70, 50, 31, 31))
            self.pushButton_26.setObjectName(_fromUtf8("pushButton_26"))
            self.resultLetters = QtGui.QWidget(widget)
            self.resultLetters.setGeometry(QtCore.QRect(30, 329, 541, 51))
            self.resultLetters.setObjectName(_fromUtf8("resultLetters"))
            self.imgPendu = QtGui.QLabel(widget)
            self.imgPendu.setGeometry(QtCore.QRect(60, 20, 241, 291))
            self.imgPendu.setText(_fromUtf8(""))
            self.imgPendu.setObjectName(_fromUtf8("imgPendu"))
            self.lcdNumber = QtGui.QLCDNumber(widget)
            self.lcdNumber.setGeometry(QtCore.QRect(510, 20, 64, 23))
            self.lcdNumber.setFrameShape(QtGui.QFrame.NoFrame)
            self.lcdNumber.setFrameShadow(QtGui.QFrame.Plain)
            self.lcdNumber.setDigitCount(2)
            self.lcdNumber.setSegmentStyle(QtGui.QLCDNumber.Flat)
            self.lcdNumber.setProperty("intValue", 10)
            self.lcdNumber.setObjectName(_fromUtf8("lcdNumber"))
    
            self.retranslateUi(widget)
            QtCore.QMetaObject.connectSlotsByName(widget)
            widget.setTabOrder(self.pushButton, self.pushButton_2)
            widget.setTabOrder(self.pushButton_2, self.pushButton_3)
            widget.setTabOrder(self.pushButton_3, self.pushButton_4)
            widget.setTabOrder(self.pushButton_4, self.pushButton_5)
            widget.setTabOrder(self.pushButton_5, self.pushButton_6)
            widget.setTabOrder(self.pushButton_6, self.pushButton_7)
            widget.setTabOrder(self.pushButton_7, self.pushButton_8)
            widget.setTabOrder(self.pushButton_8, self.pushButton_9)
            widget.setTabOrder(self.pushButton_9, self.pushButton_10)
            widget.setTabOrder(self.pushButton_10, self.pushButton_11)
            widget.setTabOrder(self.pushButton_11, self.pushButton_12)
            widget.setTabOrder(self.pushButton_12, self.pushButton_13)
            widget.setTabOrder(self.pushButton_13, self.pushButton_18)
            widget.setTabOrder(self.pushButton_18, self.pushButton_17)
            widget.setTabOrder(self.pushButton_17, self.pushButton_26)
            widget.setTabOrder(self.pushButton_26, self.pushButton_22)
            widget.setTabOrder(self.pushButton_22, self.pushButton_23)
            widget.setTabOrder(self.pushButton_23, self.pushButton_21)
            widget.setTabOrder(self.pushButton_21, self.pushButton_24)
            widget.setTabOrder(self.pushButton_24, self.pushButton_16)
            widget.setTabOrder(self.pushButton_16, self.pushButton_14)
            widget.setTabOrder(self.pushButton_14, self.pushButton_19)
            widget.setTabOrder(self.pushButton_19, self.pushButton_20)
            widget.setTabOrder(self.pushButton_20, self.pushButton_15)
            widget.setTabOrder(self.pushButton_15, self.pushButton_25)
    
        def retranslateUi(self, widget):
            widget.setWindowTitle(_translate("widget", "Form", None))
            self.pushButton.setText(_translate("widget", "A", None))
            self.pushButton_2.setText(_translate("widget", "B", None))
            self.pushButton_3.setText(_translate("widget", "C", None))
            self.pushButton_4.setText(_translate("widget", "D", None))
            self.pushButton_5.setText(_translate("widget", "E", None))
            self.pushButton_6.setText(_translate("widget", "F", None))
            self.pushButton_7.setText(_translate("widget", "G", None))
            self.pushButton_8.setText(_translate("widget", "H", None))
            self.pushButton_9.setText(_translate("widget", "I", None))
            self.pushButton_10.setText(_translate("widget", "J", None))
            self.pushButton_11.setText(_translate("widget", "K", None))
            self.pushButton_12.setText(_translate("widget", "L", None))
            self.pushButton_13.setText(_translate("widget", "M", None))
            self.pushButton_14.setText(_translate("widget", "V", None))
            self.pushButton_15.setText(_translate("widget", "Y", None))
            self.pushButton_16.setText(_translate("widget", "U", None))
            self.pushButton_17.setText(_translate("widget", "O", None))
            self.pushButton_18.setText(_translate("widget", "N", None))
            self.pushButton_19.setText(_translate("widget", "W", None))
            self.pushButton_20.setText(_translate("widget", "X", None))
            self.pushButton_21.setText(_translate("widget", "S", None))
            self.pushButton_22.setText(_translate("widget", "Q", None))
            self.pushButton_23.setText(_translate("widget", "R", None))
            self.pushButton_24.setText(_translate("widget", "T", None))
            self.pushButton_25.setText(_translate("widget", "Z", None))
            self.pushButton_26.setText(_translate("widget", "P", None))
    
    

    Merci de votre aide ! :)

    -
    Edité par Anonyme 8 mars 2013 à 11:58:34

    • Partager sur Facebook
    • Partager sur Twitter
      8 mars 2013 à 14:15:14

      Bonjour,

      Tu peux utiliser des listes pour stocker tes boutons et les informations les concernant :

      # buttonProperties : [QPushButton, x, y, name, text]
      buttonProperties = [[None, 10, 10, "pushButton_1", "A"],
                          [None, 30, 10, "pushButton_7", "B"]] # à completer bien sur
      pushbutton = []
      for elem in buttonproperties:
          elem[0] = QtGui.QPushButton(self.clavier)
          elem[0].setGeometry(QtCore.QRect(elem[1], elem[2], 31, 31))
          elem[0].setObjectName(_fromUtf8(elem[3]))
          elem[0].setText(_translate("widget", elem[5], None))
      
      for i in range(len(buttonProperties)):
          widget.setTabOrder(buttonProperties[i][0], buttonProperties[i+1][0])

      Il faut compléter la liste buttonProperties avec les informations concernant tes boutons dans l'ordre dans lequel tu veux les afficher (la deuxième boucle for les ordonne en suivant l'ordre de la liste).

      -
      Edité par cookkiees 8 mars 2013 à 14:15:41

      • Partager sur Facebook
      • Partager sur Twitter
        10 mars 2013 à 14:39:43

        Pour connecter les boutons, tu peux dériver la classe QPushButton pour rajouter un signal personnalisé : clickedText(text). ce signal sera émis à chaque fois que tu cliqueras sur le bouton et il passera en argument le texte du bouton. Il ne te reste plus qu'à le connecter avec un slot personnalisé qui récupèrera cet argument pour l'afficher :
        class DerivedButton (QPushButton):
            def __init__(self):
                QPushButton.__init__(self)
                self.connect(self, SIGNAL("clicked()"), sendText)
            
            def sendText(self):
                self.emit(SIGNAL("clickedText(PyQt_PyObject)"), self.text())
        
        class Window(Gui.QWidget):
            def __init__(self):
                # ...
            
            def initGui(self):
                # ...
                
                for derivedButton in self.buttonproperties:
                    self.connect(derivedButton, SIGNAL("clicked(PyQt_PyObject)"), self.afficheButtonText)
            
            def afficheButtonText(self, text):
                print text
                

        Je n'ai pas testé le code ci-dessus, mais en tout cas c'est l'idée.

        EDIT : il existe en fait une méthode plus simple. Il est inutile de créer une classe dérivée, on utilise la méthode sender().

        class Window(Gui.QWidget):
            def __init__(self):
                # ...
            
            def initGui(self):
                # ...
                
                for PushButton in self.buttonproperties:
                    PushButton[0].clicked.connect(self.afficheButtonText)
            
            def afficheButtonText(self):
                sender = self.sender()
                print sender.text()

        -
        Edité par cookkiees 10 mars 2013 à 14:49:46

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          10 mars 2013 à 15:44:37

          Parfait! C'est pile poil ce qu'il me faut. Je te remercie :)
          • Partager sur Facebook
          • Partager sur Twitter

          [PyQT4] Lancer la même action via les pushButtons

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown