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 :

Ajouter plusieurs QPushButton à droite d'une QVBoxLayout()


Sujet :

PyQt Python

  1. #1
    Nouveau candidat au Club Avatar de morgan698
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2017
    Messages : 1
    Par défaut Ajouter plusieurs QPushButton à droite d'une QVBoxLayout()
    Bonjour,

    Je suis novice en programmation python et j'ai actuellement un problème sur un projet avec PyQt que je n'arrive pas à résoudre (j'ai fait plusieurs recherches sur Google et autres forums mais aucune solution proposé n'a fonctionner , et je dois dire que je commence à m'arracher les cheveux )

    Je vous explique mon problème :
    Pour l'instant le code affiche un chanp texte avec les commandes qui s'exécutent depuis des fichiers extérieurs en ligne de commande, Je souhaite Afficher les 3 QPushButton dans 2 colonnes à droite d'un QVBoxLayout (je vais créer d'autres boutons plus tard), j'ai essayer de créer un autre QVBoxLayout mais sans succès... impossible d'afficher quelque chose à droite, mes boutons sont à chaque fois non visible. Je pense qu'il y a quelque chose que je comprends pas dans les tableaux en PyQt.

    Voici mon code :
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
    from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton, QPlainTextEdit, 
                                    QHBoxLayout, QVBoxLayout, QGridLayout, QWidget, QProgressBar, QLabel)
    from PyQt5.QtCore import QProcess
    import sys
    import re
     
    # A regular expression, to extract the % complete.
    progress_re = re.compile("Total complete: (\d+)%")
     
    def simple_percent_parser(output):
        """
        Matches lines using the progress_re regex, 
        returning a single integer for the % progress.
        """
        m = progress_re.search(output)
        if m:
            pc_complete = m.group(1)
            return int(pc_complete)
     
     
    class MainWindow(QMainWindow):
     
        def __init__(self):
            super().__init__()
     
            self.p = None
     
     
     
     
            self.btn = QPushButton("Bouton 1 colonne à droite")
            self.btn.pressed.connect(self.start_process)
     
            self.btn2 = QPushButton("Bouton 2 colonne à droite")
            self.btn2.pressed.connect(self.start_process_2)
     
            self.btn3 = QPushButton("Bouton 3 colonne à droite etc...")
            self.btn3.pressed.connect(self.start_process_3)
     
     
     
     
            self.text = QPlainTextEdit()
            self.text.setReadOnly(True)
     
            self.progress = QProgressBar()
            self.progress.setRange(0, 100)
     
     
     
            l = QVBoxLayout()
            l.addWidget(self.btn)
            l.addWidget(self.btn2)
            l.addWidget(self.btn3)
            l.addWidget(self.progress)
            l.addWidget(self.text)
     
     
     
     
            w = QWidget()
            w.setLayout(l)
            w.setFixedWidth(300)
     
     
     
     
            self.setCentralWidget(w)
     
     
     
     
     
     
     
     
        def message(self, s):
            self.text.appendPlainText(s)
     
        def start_process(self):
            if self.p is None:  # No process running.
                self.message("Executing process")
                self.p = QProcess()  # Keep a reference to the QProcess (e.g. on self) while it's running.
                self.p.readyReadStandardOutput.connect(self.handle_stdout)
                self.p.readyReadStandardError.connect(self.handle_stderr)
                self.p.stateChanged.connect(self.handle_state)
                self.p.finished.connect(self.process_finished)  # Clean up once complete.
                self.p.start("python3", ['test2.py'])
     
        def start_process_2(self):
            if self.p is None:  # No process running.
                self.message("Executing process")
                self.p = QProcess()  # Keep a reference to the QProcess (e.g. on self) while it's running.
                self.p.readyReadStandardOutput.connect(self.handle_stdout)
                self.p.readyReadStandardError.connect(self.handle_stderr)
                self.p.stateChanged.connect(self.handle_state)
                self.p.finished.connect(self.process_finished)  # Clean up once complete.
                self.p.start("python", ['API_Ajout_Point2.py'])
     
     
        def start_process_3(self):
            if self.p is None:  # No process running.
                self.message("Executing process")
                self.p = QProcess()  # Keep a reference to the QProcess (e.g. on self) while it's running.
                self.p.readyReadStandardOutput.connect(self.handle_stdout)
                self.p.readyReadStandardError.connect(self.handle_stderr)
                self.p.stateChanged.connect(self.handle_state)
                self.p.finished.connect(self.process_finished)  # Clean up once complete.
                self.p.start("python", ['API_Ajout_Point3.py'])
     
     
        def handle_stderr(self):
            data = self.p.readAllStandardError()
            stderr = bytes(data).decode("utf8")
            # Extract progress if it is in the data.
            progress = simple_percent_parser(stderr)
            if progress:
                self.progress.setValue(progress)
            self.message(stderr)
     
        def handle_stdout(self):
            data = self.p.readAllStandardOutput()
            stdout = bytes(data).decode("utf8")
            self.message(stdout)
     
        def handle_state(self, state):
            states = {   
                QProcess.NotRunning: 'Not running',
                QProcess.Starting: 'Starting',
                QProcess.Running: 'Running',
            }
            state_name = states[state]
            self.message(f"State changed: {state_name}")
     
        def process_finished(self):
            self.message("Process finished.")
            self.p = None        
     
     
    app = QApplication(sys.argv)
     
    w = MainWindow()
    w.showMaximized()
     
     
    app.exec_()
    Je vous joint une image de comment j'aimerais que les boutons et les autres soient positionnés pour que ce soit plus clair.

    Si quelqu'un pouvait m'aider please

    Nom : resultat voulu.jpg
Affichages : 165
Taille : 93,8 Ko

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il faudrait plutôt essayer avec QGridLayout qui permet des mises en page de ce genre (https://doc.qt.io/qt-5/qgridlayout.html).

    Mais quand ça devient trop compliqué, je préfère pour ma part utiliser le Designer de PyQt5 (à installer avec pip install pyqt5-tools).

Discussions similaires

  1. [AC-2007] Ajouter plusieurs enregistrements identiques en une fois
    Par facedeharicot dans le forum VBA Access
    Réponses: 7
    Dernier message: 27/07/2011, 13h38
  2. Ajouter plusieurs entrées dans une table
    Par flab78 dans le forum Débuter
    Réponses: 2
    Dernier message: 25/04/2008, 15h17
  3. requêtes ajout plusieurs données dans une table
    Par COLOMBAT dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/04/2008, 17h27
  4. Ajouter plusieurs items à une Combobox
    Par ShortcutZ dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 16/10/2006, 09h14

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