Partage
  • Partager sur Facebook
  • Partager sur Twitter

Intégration de fonctions et questions PyQt

Sujet résolu
    25 mai 2019 à 11:42:51

    Bonjour à tous,

    Je travaille actuellement sur une interface graphique avec PyQt.

    Cette interface a pour but de communiquer avec d'autres objets via une liaison série.

    Pour vous donner une idée de l'IHM, elle est composée sous forme d'onglets. Dans 1 onglet (QTabWidget, QWidget) j'ai 1 première partie  sous forme de QGroupBox auquel j'ai ajouté un QGridLayout afin de placer mes boutons. La seconde partie de l'onglet est aussi un QGroupBox dans lequel j'ai un QHBoxLayout et un QTextEdit afin d'afficher des informations. J'ajoute ces deux parties dans un QVBoxLayout.

    L'interface se lance sans problèmes mais j'ai quelques problèmes au fur et à mesure de mon avancée:

    1) J'ai vraiment du mal à comprendre comment intégrer des fonctions à l'IHM, j'aimerais déclarer mes fonctions importantes dans des fichiers à part puis les intégrer dans le fichier principal et les appeler avec un clique.

    2)J'ai intégré à l'IHM un menu déroulant (QComboBox) et je souhaite récupérer la valeur sélectionnée par l'utilisateur afin de pouvoir l'utiliser dans une fonction. J'ai suivi ce tuto mais quand je souhaite insérer self.combo.currentTextChanged et la fonction qui s'y lie j'ai des problèmes à l’exécution de mon programme.

    3)Je souhaite créer une fonction qui enverra des données en liaison série et qui attendra ensuite de lire une réponse sur cette même liaison série pour continuer à envoyer des données. Mais je souhaite utiliser en paramètre de boucle While une variable provenant du programme principale (de la QComboBox) ça fonctionnera?

    Je vous mets ici le code d'un onglet de mon programme:

    from PyQt5 import QtGui, QtCore
    from PyQt5.QtWidgets import QApplication, QDialog, QTabWidget, QGroupBox, QVBoxLayout, \
        QWidget, QPushButton, QHBoxLayout, QGridLayout, QTextEdit, QSizeGrip
    import sys
    
    class Interface(QDialog):
        def __init__(self):
            super().__init__()
            
            self.setWindowTitle("Titre")
            self.setGeometry(300, 300, 800, 480)
    
            vbox = QVBoxLayout()
            ongletWidget = QTabWidget()
    
            ongletWidget.setFont(QtGui.QFont("Sanserif", 13))
            ongletWidget.addTab(OngletCommande(), "Onglet")
    
            flags = QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
            self.setWindowFlags(flags)
            sizegrip = QSizeGrip(self)
            #sizegrip.setVisible(True)
    
            vbox.addWidget(sizegrip)
            vbox.addWidget(ongletWidget)
    
            self.setLayout(vbox)
    
    
    class OngletCommande(QWidget):
    
        def __init__(self):
            super().__init__()
    
            self.CommandePart1 = QGroupBox("Premiere Partie:")
            grillePlacement = QGridLayout()
    
            self.position1 = QPushButton("Position 1", self)
            grillePlacement.addWidget(self.position1, 0,0)
            self.position1.clicked.connect(lambda: self.textInfo.append("Afficher infos"))
    
            self.position2 = QPushButton("Position 2", self)
            grillePlacement.addWidget(self.position2, 0, 1)
            self.position2.clicked.connect(lambda: self.textInfo.append("Afficher infos"))
    
            self.position3 = QPushButton("Position 3", self)
            grillePlacement.addWidget(self.position3, 0, 2)
            self.position3.clicked.connect(lambda: self.textInfo.append("Afficher infos"))
    
            self.position4 = QPushButton("Position 4", self)
            grillePlacement.addWidget(self.position4, 0, 3)
            self.position4.clicked.connect(lambda: self.textInfo.append("Afficher infos"))
    
            self.position5 = QPushButton("Position 5", self)
            grillePlacement.addWidget(self.position5, 0, 4)
            self.position5.clicked.connect(lambda: self.textInfo.append("Afficher infos"))
    
            self.CommandePart1.setLayout(grillePlacement)
    
    #----------------------------------------------------------------------
    
            self.CommandePart2 = QGroupBox("Deuxieme Partie:")
            self.textInfo = QTextEdit()
            self.textInfo.setPlaceholderText("Ici s'affiche les informations") #setPlaceholderText permet d'écrire un texte informatif s'il n'y a pas de texte à afficher
            self.textInfo.setReadOnly(True)
    
            contenantTextInfo = QHBoxLayout()
            contenantTextInfo.addWidget(self.textInfo)
            self.CommandePart2.setLayout(contenantTextInfo)
    # -----------------------------------------------------------------
            contenantPrinc = QVBoxLayout()
            contenantPrinc.addWidget(self.CommandePart1)
            contenantPrinc.addWidget(self.CommandePart2)
            self.setLayout(contenantPrinc)
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        tabdialog = Interface()
        tabdialog.show()
        app.exec()



    • Partager sur Facebook
    • Partager sur Twitter

    Intégration de fonctions et questions PyQt

    × 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