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 :

Liste déroulante dans une Table


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2022
    Messages : 5
    Par défaut Liste déroulante dans une Table
    Bonjour, je suis débutant dans le domaine du code et notamment dans l'utilisation de pyqt5.
    J'ai créer l'interface suivante :

    Nom : image1pyqt.png
Affichages : 236
Taille : 17,3 Ko

    L'objectif est alors que lorsque l'on clique sur "ajouter une ligne", une nouvelle ligne se crée dans la table avec un QComboBox dans la première case.

    Lorsque j'exécute mon code, l'erreur suivante s'affiche :

    Nom : image3pyqt.png
Affichages : 214
Taille : 18,5 Ko

    Merci d'avance pour votre aide


    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
    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    from math import *
    import sys
     
    class LoadTable(QTableWidget):
        def __init__(self):
            super().__init__()
     
        def _addrow(self):
            rowcount = self.rowCount()-1
            self.insertRow(rowcount)
            combox_add = QtWidgets.QComboBox(self)
            combox_add.addItems(["A","B","C","D","E","F"]) 
            self.setCellWidget(rowcount, 0, combox_add) 
     
     
    class Window(QWidget):
        def __init__(self):
            super().__init__()
     
            Widget.setGeometry(10, 30, 1500, 1000) 
     
            self.label_3 = QLabel("Numéro :",Widget)
            self.label_3.move(int(0.03*1500),int(0.02*1000))
     
            self.lineEdit_1 = QLineEdit(Widget) 
            self.lineEdit_1.setGeometry(100,16,90,28)
     
           #table_1
            self.table_1 = QtWidgets.QTableWidget(Widget)
            self.table_1.setGeometry(int(0.02*1500),int(0.07*1000),int(0.32*1500),int(0.15*1000))
            self.table_1.setColumnCount(1)
            self.table_1.setRowCount(3)
     
     
            horizontal = self.table_1.horizontalHeader()       
            horizontal.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
     
            vertical = self.table_1.verticalHeader()       
            vertical.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
            vertical.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch)
            vertical.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch)
     
     
            name_ligne =("Responsable","Date","Heure ",)
            self.table_1.setVerticalHeaderLabels(name_ligne)
            self.table_1.horizontalHeader().hide()
     
     
           #table_2
            self.table_2 = QtWidgets.QTableWidget(Widget)
            self.table_2.setGeometry(int(0.025*1500),int(0.30*1000),int(0.95*1500),int(0.40*1000))
            self.table_2.setColumnCount(10)
            nb_row = 5
            self.table_2.setRowCount(nb_row)
     
            name_colonne =('1','2','3','4','5','6','7','8','9','10')
            self.table_2.setHorizontalHeaderLabels(name_colonne)
     
     
            for i in range(0,nb_row):
                    self.combo_1 = QComboBox()
                    self.combo_1.addItems(["A","B","C","D","E","F"])
                    self.table_2.setCellWidget(i, 0, self.combo_1)
     
     
           #Button
            self.Button_1 = QPushButton("Ajouter une ligne",Widget)
            self.Button_1.setGeometry(int(0.60*1500),int(0.265*1000),int(0.1625*1500),int(0.03*1000))
            self.Button_1.clicked.connect(self.table_2._addrow)
     
     
     
    app = QtWidgets.QApplication(sys.argv)
    Widget = QtWidgets.QWidget()
    widget =Window()
    Widget.show()
    app.exec_()

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Senpaic85 Voir le message
    Lorsque j'exécute mon code, l'erreur suivante s'affiche :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "essai.py", line 78, in <module>
        widget =Window()
      File "essai.py", line 72, in __init__
        self.Button_1.clicked.connect(self.table_2._addrow)
    AttributeError: 'QTableWidget' object has no attribute '_addrow'
    C'est malheureusement exact. Ouvre la doc de PyQt, tu verras qu'effectivement un QTableWidget n'a pas de méthode "_addrow". Or self.table_2 est bien déclaré comme un QTableWidget. A partir de là que veux-tu qu'on fasse? Qu'on modifie le code de la lib PyQt pour qu'elle s'adapte à ton programme?

    Et tu devrais utiliser le gestionnaire de positionnement pour placer tes éléments au lieu de les mover à des positions x,y. Je te suggère en fait d'aller examiner mes exemples d'apprentissage PyQt.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2022
    Messages : 5
    Par défaut
    Merci Sve@r et wiztricks pour vos réponses. Je vais essayer de modifier le code avec vos remarques.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2022
    Messages : 5
    Par défaut Erreur circulaire
    Bonjour, suite à vos remarque j'ai pu résoudre mon problème et améliorer mon interface donc merci à vous.

    J'essai maintenant de connecter mon interface à une base de données SQL. Ainsi je veux récupérer les données que je rentre dans l'interface grâce au bouton "Enregistrer" pour les renvoyer dans le fichier LectureSQL.py et pouvoir dans le futur connecter le fichier à une base de données.
    Avant de me lancer dans toute les connections, j'essaie seulement pour le moment de récupérer le contenu de la LineEdit_1 : Numéro Essai

    Quand je lance Interface l'erreur suivante apparaît :
    Nom : Capture1.png
Affichages : 173
Taille : 5,3 Ko


    J'ai compris pourquoi l'erreur circulaire apparait mais je ne sais pas comment modifier mon code pour obtenir les données de l'interface dans le fichier LectureSQL.py
    Est ce que quelqu'un pourrait de nouveau m'aider pour trouver le moyen d'avoir un code fonctionnel?

    Interface.py
    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
     
    from PyQt5 import QtGui, QtWidgets
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    import sys 
     
    class Parameters():
        def Scale(self,CoorX,CoorY,Width,Height):
             self.CoorX = CoorX
             self.CoorY = CoorY
             self.Width = Width
             self.Height = Height
     
        def Style(self, color, font,fontsize,bold):
             self.color = color
             self.font = font
             self.fontsize = fontsize
             self.bold = bold
    a=Parameters()
    b=Parameters()
    c=Parameters()
    d=Parameters()
    e=Parameters()
    GeometryWindow = a.Scale(400,30,1500,1000)
    StyleTitrePrincipal = b.Style("color:black","Segoe UI",25,"Bold")
    StyleTexte = c.Style("color:black","Calibri",16,"")
    StyleInsertTexte = d.Style("color:black","Calibri",12,"")
    StyleTable = e.Style("color:black","Calibri",12,"")
     
    class Window(QMainWindow): 
        def __init__(self): 
            super().__init__() 
            self.setWindowTitle("Application")
            self.setGeometry(a.CoorX, a.CoorY, a.Width, a.Height) 
            self.UiComponents()        
            self.show()        
     
        def UiComponents(self): 
     
           #label_1 - Essai n°
            label_1 = QLabel(self)
            label_1.setText("Essai n°")
            label_1.move(int(0.03*a.Width),int(0.02*a.Height))
            label_1.setFont(QtGui.QFont(c.font,int(c.fontsize/1000*a.Height)))
            label_1.setStyleSheet(c.color)
     
           #lineEdit_1
            lineEdit_1 = QLineEdit(self) 
            lineEdit_1.setGeometry(int(0.105*a.Width),int(0.017*a.Height),int(0.06*a.Width),int(0.03*a.Height))
            lineEdit_1.setFont(QtGui.QFont(d.font,int(d.fontsize/1000*a.Height)))
            lineEdit_1.setStyleSheet(d.color)
            lineEdit_1.setStyleSheet("background-color: yellow;")
     
           #Table_1
            table_1 = QTableWidget(self)
            table_1.setGeometry(int(0.02*a.Width),int(0.07*a.Height),int(0.32*a.Width),int(0.15*a.Height))
            table_1.setColumnCount(1)
            table_1.setRowCount(3)
            table_1.setFont(QtGui.QFont(e.font,int(e.fontsize/1000*a.Height)))
            table_1.setStyleSheet(e.color)
     
            horizontal = table_1.horizontalHeader()       
            horizontal.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
     
            vertical = table_1.verticalHeader()       
            vertical.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
            vertical.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch)
            vertical.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch)
     
            name_ligne =("Responsable","Date","Heure",)
            table_1.setVerticalHeaderLabels(name_ligne)
            table_1.horizontalHeader().hide()
     
           #table_2
            self.table_2 = QtWidgets.QTableWidget(self)
            self.table_2.setGeometry(int(0.025*a.Width),int(0.30*a.Height),int(0.95*a.Width),int(0.40*a.Height))
            self.table_2.setColumnCount(10)
            nb_row = 5 
            self.table_2.setRowCount(nb_row)
            self.table_2.setFont(QtGui.QFont(e.font,int(e.fontsize/1000*a.Height)))
            self.table_2.setStyleSheet(e.color)
     
            #nom des colonnes
            name_colonne =("1","2","3","4","5","6","7","8","9","10")
            self.table_2.setHorizontalHeaderLabels(name_colonne)
     
            #ajoute combo_1
            combo1 = {}
            for i in range(nb_row):
                    combo1[i] = QComboBox()
                    combo1[i].addItems(["A","B","C"])
                    self.table_2.setCellWidget(i, 0, combo1[i])
     
           #Button1
            Button_1 = QPushButton("Ajouter une ligne",self)
            Button_1.setGeometry(int(0.60*a.Width),int(0.265*a.Height),int(0.1625*a.Width),int(0.03*a.Height))
            Button_1.clicked.connect(self._addrow)
     
           #Button_2
            Button_2 = QtWidgets.QPushButton("Enregistrer",self)
            Button_2.setGeometry(int(0.01*a.Width),int(0.94*a.Height),int(0.25*a.Width),int(0.05*a.Height))
            Button_2.clicked.connect(action)
     
        def _addrow(self):
            rowcount = self.table_4.rowCount()-1
            self.table_4.insertRow(rowcount)
            combo2 = QComboBox()
            combo2.addItems(["AAA","BBB","CCC"])
            self.table_4.setCellWidget(rowcount, 0, combo2)
     
        def result(self):
            print("Test3")
            numero_essai = Window.UiComponents(self).lineEdit_1.text()
            print(numero_essai)
     
    def action(self):
        print("Test1")
        from LectureSQL import InOutSQL
        InOutSQL.Test(self)
     
     
    App = QApplication(sys.argv) 
    window = Window() 
    sys.exit(App.exec())
    LectureSQL.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    class InOutSQL:
        def Test(self):
            print("test2")
            from Interface import Window
            Window.result(self)
     
    #Code à continuer

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Senpaic85 Voir le message
    Est ce que quelqu'un pourrait de nouveau m'aider pour trouver le moyen d'avoir un code fonctionnel?
    Ton code commence à devenir une vraie jungle. Il y a des classes, puis des instructions avec des variables aux noms aussi recherchés que "a", "b", "c", etc. Tu ne sembles pas être allé voir mes exemples PyQt. Pourtant Qt ça s'apprend avant de s'utiliser.
    Déjà un import ça se fait au début du programme, pas dans une fonction. On importe les éléments dont on a besoin ; et dans les fonctions on peut les utiliser. Et surtout on rajoute if __name__= "__main__" permettant de différencer quand un programme est exécuté (on peut alors faire des trucs comme créer le QApplication) ou importé (et dans ce cas ne pas le créer ce qui évite à l'appli d'avoir deux QApplications qui tournent en parallèle et en conflit). C'est aussi dans mes exemples.

    Et on évite aussi d'avoir PA qui importe PB avec PB qui importe PA. On crée un programme principal qui importe tout ce qu'il faut, et ses modules qui n'importent rien puisqu'ils sont appelés par le programme principal et que les import sont donc déjà faits.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par Senpaic85 Voir le message
    Lorsque j'exécute mon code, l'erreur suivante s'affiche
    L'erreur dit qu'_addrow n'existe pas...
    Pourtant vous avez bien créé une class LoadTable avec cette méthode.
    Mais vous avez créé vos tables comme instances de QTableWidget et non de LoadTable.

    Programmer est un boulot qui demande d'être attentif et comme on ne l'est pas toujours, de comprendre pourquoi Python râle alors qu'on avait tout bien pensé pour que...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. enregistrer plusieurs colonnes d'une liste déroulante dans une table
    Par juliejuliejuliejulie dans le forum VBA Access
    Réponses: 5
    Dernier message: 19/06/2012, 18h18
  2. Listes déroulantes dans une table
    Par Emeline1989 dans le forum Access
    Réponses: 1
    Dernier message: 18/04/2011, 12h02
  3. [AC-2007] Deux zones de liste déroulante dans une table
    Par Junior75002 dans le forum Access
    Réponses: 3
    Dernier message: 04/01/2011, 00h56
  4. [AC-2007] Liste déroulante dans une table
    Par sukkie dans le forum IHM
    Réponses: 6
    Dernier message: 27/04/2009, 19h38
  5. Liste déroulante dans une table hyperfile
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 8
    Dernier message: 01/11/2006, 18h27

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