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 :

Actualisation affichage Qtable Widget [QtGui]


Sujet :

PyQt Python

  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 17
    Par défaut Actualisation affichage Qtable Widget
    Bonjour ,

    j'ai un petit soucis d'actualisation sur un Qtable Widget, j'ajoute bien mes items dans un Qtable Widget (voir la fin du code)
    Mais ces données ne se mettent à jour que quand je redimensionne ma fenêtre, sélectionne un élément de mon tableau (qui est vide) ou quand je scroll dedans. Et la tout apparait comme par magie

    Avez vous des pistes concernant ce soucis car je trouve aucune info sur ce type de problème ?
    Comme ça je dirais qu'il faudrait que j'actualise mon widget, mais je ne trouve aucune méthode qui fonctionne

    merci d'avance



    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
     
    class Recherche_article(QtWidgets.QWidget):
        def __init__(self, parent=None):
            super(Recherche_article, self).__init__(parent)
            self.setup_ui()
     
        def setup_ui(self):
            self.create_widgets()
            self.modify_widgets()
            self.create_layouts()
            self.add_widgets_to_layouts()
            self.setup_connections()
     
        def create_widgets(self):
            self.label = QtWidgets.QLabel("Recherche article", self)
     
            self.le_code_art = QtWidgets.QLineEdit(self)
            self.btn_search = QtWidgets.QPushButton('Recherche', self)
     
            self.table_widget = QtWidgets.QTableWidget(50, 4, self)
     
        def modify_widgets(self):
            self.label.setFixedHeight(25)
            self.le_code_art.setFixedHeight(25)
            self.le_code_art.setFixedWidth(200)
     
            # Bloquer la modification de la table widget
            self.table_widget.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers)
     
        def create_layouts(self):
            self.layout_home = QtWidgets.QGridLayout()
     
        def add_widgets_to_layouts(self):
            self.layout_home.addWidget(self.label, 1, 0, 1, 1)
     
            self.layout_home.addWidget(self.le_code_art, 2, 0, 1, 1)
            self.layout_home.addWidget(self.btn_search, 2, 1, 1, 1)
     
            self.layout_home.addWidget(self.table_widget, 3, 0, 5, 1)
     
            self.setLayout(self.layout_home)
     
        def setup_connections(self):
            self.btn_search.clicked.connect(self.search_CA)
     
        def search_CA(self):
            CA = self.le_code_art.text()
            CA = f"%{CA}%"
            selections = BDD().search_code_article(CA)
            print(selections)
     
            self.table_widget.clearContents()
            row = 0
            for s in selections:
                for i in range(0, len(s)):
                    item = QtWidgets.QTableWidgetItem(s[i])
                    self.table_widget.setItem(row, i, item)
                row += 1

  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,

    Comme ceci peut-être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        def search_CA(self):
            CA = self.le_code_art.text()
            CA = f"%{CA}%"
            selections = BDD().search_code_article(CA)
            print(selections)
            self.table_widget.clearContents()
            for row, s in enumerate(selections):
                self.insertRow(row)
                for i in range(0, len(s)):
                    item = QtWidgets.QTableWidgetItem(s[i])
                    self.table_widget.setItem(row, i, item)
     
            QtCore.QCoreApplication.processEvents()
    Normalement je n'ai pas besoin de la dernière ligne pour forcer la mise à jour de l'interface mais, d'une machine à l'autre ...

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 17
    Par défaut
    merci pour la proposition mais elle ne fonctionne pas.
    Même effet, pour info je suis sur Mac avec Pycharm avec un venv

    Je vais peut etre essayer d'une autre machine pour voir si c'est mon code

    Edit :
    je viens de faire un self.table_widget.resizeColumnsToContents()
    j'ai vraiment un bug d'affichage, avec cette cmd le texte apparait mais garde en fond l'ancien tableau vide

    Nom : Capture d’écran 2020-03-17 à 11.04.28.png
Affichages : 926
Taille : 75,8 Ko

    Nom : Capture d’écran 2020-03-17 à 11.04.56.png
Affichages : 890
Taille : 92,2 Ko

    bizarre !!!!
    et quand je clique sur les cases il met à jour l'alignement des titres de colonnes

  4. #4
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 17
    Par défaut
    J'ai trouvé une solution un peu bizarre mais ça fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    self.table_widget.setVisible(False)
    self.table_widget.setVisible(True)
    si ça peut aider quelqu'un dans le futur

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

Discussions similaires

  1. Actualiser "rapidement" un widget Tk
    Par Woufeil dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 29/11/2007, 12h31
  2. langue d'affichage des widgets
    Par awalter1 dans le forum GTK+ avec Python
    Réponses: 2
    Dernier message: 11/10/2007, 18h23
  3. Affichage de widget après destruction
    Par Zeunknown dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 31/07/2007, 20h09
  4. VC++5 Actualisation affichage MFC
    Par mimic50 dans le forum Visual C++
    Réponses: 7
    Dernier message: 11/08/2006, 10h24
  5. [Tableaux] Problème d'actualisation affichage
    Par miram dans le forum Langage
    Réponses: 7
    Dernier message: 09/02/2006, 15h14

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