IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Appliquer une fonction à un bouton


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 30
    Par défaut Appliquer une fonction à un bouton
    Bonjour,

    je cherche à faire une petite interface permettant d'envoyer/recevoir et afficher les trames envoyées/reçues pour cela je me suis mis à PyQt5 et apres plusieurs recherche sur internet j'en arrive à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    from PyQt5 import QtCore, QtGui, QtWidgets
     
    class Ui_GroupBox():#object):
     
        def UDP_COMM():
            print 'cest parti'
            IP             = "192.168.1.17"
            PORT           = 31313
            Message        = "55032002"
            Data           = Message.decode('hex')
     
            s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        ##    print "j'envoi : ",Message
            s.sendto(Data,(IP,PORT))
     
            flag = 1
     
            while flag == 1:
     
                data,addr = s.recvfrom(1024)
     
        ##        print "addresse :",addr
     
                datahex = ':'.join(x.encode('hex') for x in data)
        ##        print "message recu (1): ",datahex
     
                if datahex != '':
                    flag = 0
     
     
            tampon = datahex.replace(':00:',':0a:')
     
            tampon2 = tampon[12:len(tampon)-3].replace(':','')
     
            messagedecode = (bytearray.fromhex(tampon2).decode())
        ##    print "Message recu (2): \n",messagedecode
            return messagedecode,Message
     
     
     
        def acquisition():
     
     
            global ToSend
            global ToReceive
     
            messagedecode, messageenvoye = UDP_COMM()
            date = time.strftime("%d/%m/%Y  %H:%M:%S")
     
            try:
                ToSend = ToSend + "\n" + date + " >>> " + messageenvoye
                ToReceive = ToReceive + "\n" + date + " >>> " + messagedecode
     
            except:
                ToSend = date + " >>> " + messageenvoye
                ToReceive = date + " >>> " + messagedecode
     
        def wrapper():
            test()
        def test():
            print "salut"
     
        def setupUi(self,GroupBox):
     
            GroupBox.setObjectName("GroupBox")
            GroupBox.resize(400, 320)
     
            self.pushButton = QtWidgets.QPushButton(GroupBox)
     
            self.pushButton.setGeometry(QtCore.QRect(280, 210, 113, 32))
            self.pushButton.setObjectName("pushButton")
     
     
            self.MaZoneText1 = QtWidgets.QTextEdit(GroupBox)
     
            self.MaZoneText1.setGeometry(QtCore.QRect(10, 30, 241, 141))
            self.MaZoneText1.setReadOnly(True)
            self.MaZoneText1.setObjectName("MaZoneText1")
            self.MaZoneText1.append('salut')
     
            self.retranslateUi(GroupBox)
            QtCore.QMetaObject.connectSlotsByName(GroupBox)
    ##        self.pushButton.clicked(connect(wrapper)) ## <<<< probleme à ce niveau voir dans Quote
     
     
        def retranslateUi(self,GroupBox):
     
            _translate = QtCore.QCoreApplication.translate
            GroupBox.setWindowTitle(_translate("GroupBox", "GroupBox"))
            GroupBox.setTitle(_translate("GroupBox", "GroupBox"))
            self.pushButton.setText(_translate("GroupBox", "Envoyer"))
    Traceback (most recent call last):
    File "/Users/R.../Desktop/test/main.py", line 22, in <module>
    myapp = ShipHolderApplication()
    File "/Users/R.../Desktop/test/main.py", line 12, in __init__
    self.createWidgets()
    File "/Users/R.../Desktop/test/main.py", line 16, in createWidgets
    self.ui.setupUi(self)
    File "/Users/R.../Desktop/test/groupbox.py", line 93, in setupUi
    self.pushButton.clicked(connect(wrapper))
    NameError: global name 'connect' is not defined
    Que j'execute avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from groupbox import *#Ui_GroupBox
     
    class ShipHolderApplication(QGroupBox):
     
            def __init__(self,parent=None):
                super (ShipHolderApplication,self).__init__(parent)
                self.createWidgets()
     
            def createWidgets(self):
                self.ui = Ui_GroupBox()
                self.ui.setupUi(self)
     
     
    if __name__ == "__main__":
     
            app = QApplication(sys.argv)
            myapp = ShipHolderApplication()
            myapp.show()
            sys.exit(app.exec_())

    ma question est donc la suivante, comment je peux faire pour que mon bouton execute une fonction idéalement "acquisition" vu que celle ci se charge du reste (j'ai créé des fonction test wrapper et test, mais rien ne se passe comme je le veux). L'idée serait ensuite que ce qui est réceptionné s'affiche dans des Box ensuite.
    Le code de l'interface a été généré avec QT en .ui puis converti en .py grace à pyuic5

    NB/ Je suis débutant, j'accepterai toute critique constructive

    Vous en remerciant par avance,

    Cordialement,
    moa131.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    clicked est un signal qui est une classe et connect en est une méthode.
    wrapper est une méthode de ta classe.

    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            self.pushButton.clicked.connect(self.wrapper)

    NB/ Je suis débutant, j'accepterai toute critique constructive
    si tu le demandes, revois ton deuxième code comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    import sys
    from PyQt5.QtWidgets import QApplication, QGroupBox, 
    from groupbox import Ui_GroupBox
     
    class ShipHolderApplication(QGroupBox):
            def __init__(self, parent=None):
                super().__init__(parent)
                self.createWidgets()
     
            def createWidgets(self):
                self.ui = Ui_GroupBox()
                self.ui.setupUi(self)
     
    if __name__ == "__main__":
            app = QApplication(sys.argv)
            myapp = ShipHolderApplication()
            myapp.show()
            sys.exit(app.exec_())
    Les imports "en vrac" n'ont pas de raison d'être.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 30
    Par défaut
    Bonjour,

    Merci pour votre réponse, celle-ci à un petit probleme, lorsque je l'execute il n'y a aucun message d'erreur mais me provoque la fermeture de la fenetre, et lorsque je le re-execute une fenetre s'ouvre:
    The last time you opened Python, it unexpectedly quit while reopening windows. Do you want to try to reopen its windows again ? if you choose not to reopen windows, you may have to open and position the windows yourself. [Don't Reopen] [Reopen]
    Avez vous une idée de comment fixer cela ?

    Vous en remerciant par avance,
    cordialement
    moa131

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Je m'étais contenté de solutionner ton problème de connexion, mais en y regardant de plus près ton code ne peut effectivement pas fonctionner comme ça.

    Tu as omis self à divers endroits par exemple.

    J'ai mis ton code au propre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    class Ui_GroupBox:
     
        def UDP_COMM(self):
            IP             = "192.168.1.17"
            PORT           = 31313
            Message        = "55032002"
            Data           = Message.decode('hex')
            s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
            s.sendto(Data,(IP,PORT))
     
            flag = 1
            while flag == 1:
                data,addr = s.recvfrom(1024)
                datahex = ':'.join(x.encode('hex') for x in data)
                if datahex != '':
                    flag = 0
     
            tampon = datahex.replace(':00:',':0a:')
            tampon2 = tampon[12:len(tampon)-3].replace(':','')
            messagedecode = (bytearray.fromhex(tampon2).decode())
            return messagedecode,Message
     
        def acquisition(self):
            messagedecode, messageenvoye = self.UDP_COMM()
            date = time.strftime("%d/%m/%Y  %H:%M:%S")
            try:
                ToSend = ToSend + "\n" + date + " >>> " + messageenvoye
                ToReceive = ToReceive + "\n" + date + " >>> " + messagedecode
            except:
                ToSend = date + " >>> " + messageenvoye
                ToReceive = date + " >>> " + messagedecode
     
        def wrapper(self):
            self.test()
     
        def test(self):
            print("salut")
     
        def setupUi(self, GroupBox):
            GroupBox.setObjectName("GroupBox")
            GroupBox.resize(400, 320)
            self.pushButton = QtWidgets.QPushButton(GroupBox)
            self.pushButton.setGeometry(QtCore.QRect(280, 210, 113, 32))
            self.pushButton.setObjectName("pushButton")
            self.MaZoneText1 = QtWidgets.QTextEdit(GroupBox)
            self.MaZoneText1.setGeometry(QtCore.QRect(10, 30, 241, 141))
            self.MaZoneText1.setReadOnly(True)
            self.MaZoneText1.setObjectName("MaZoneText1")
            self.MaZoneText1.append('salut')
            self.retranslateUi(GroupBox)
            QtCore.QMetaObject.connectSlotsByName(GroupBox)
            self.pushButton.clicked.connect(self.wrapper)
     
        def retranslateUi(self, GroupBox):
            _translate = QtCore.QCoreApplication.translate
            GroupBox.setWindowTitle(_translate("GroupBox", "GroupBox"))
            GroupBox.setTitle(_translate("GroupBox", "GroupBox"))
            self.pushButton.setText(_translate("GroupBox", "Envoyer"))
    Il ne se plante plus mais ça ne veux pas dire qu'il est fonctionnel, par exemple je ne vois pas à quoi sert la méthode aquisition ...

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 30
    Par défaut
    Bonjour,

    la méthode acquisition est là simplement parce que j'ai copié coller mon code fonctionnel que j'avais écris sur TKinter qui ne me fournissais pas de bon rendu c'est pour ca que je me suis tourné sur PyQt, je n'ai pas vraiment commencer à virer ce qui n'était plus nécessaire, pour le moment j'essaie juste de faire fonctionner mon bouton et mon affichage dans ma box

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Ben oui ma copie n'a pas repris les imports, rajoute-les alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    from PyQt5 import QtCore, QtGui, QtWidgets

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/07/2007, 14h03
  2. Réponses: 3
    Dernier message: 08/06/2007, 13h09
  3. appliquer une fonction à toutes les balises <a>
    Par trotters213 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/10/2006, 16h49
  4. [MySQL] Appliquer une fonction sur un champ lors d'une requête
    Par Jérémy197 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/08/2006, 13h29
  5. Peut-on appliquer une fonction sur un champs ajouté?
    Par tinwul dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 31/05/2006, 17h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo