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 :

Accès à un QTableWidget depuis plusieurs fonctions


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Par défaut Accès à un QTableWidget depuis plusieurs fonctions
    Bonjour à tous,

    J'ai une fenêtre créée avec Qt Designer (que j'appellerai MainWindowSpectro) qui comporte, entre autre, un bouton et un tableau. Lorsque je clique sur ce bouton j'ouvre une seconde fenêtre (elle aussi créée sous Qt Designer, que j'appellerai SaveDataSpectro) qui dispose d'un bouton Ok. Lorsque ce bouton Ok est cliqué j'aimerai entrer une valeur dans une cellule du tableau. Je pensais bêtement qu'en important le fichier MainWindowSpectro obtenus à partir du fichier .ui dans le fichier .py SaveDataSpectro j'aurais accès aux variables mais ce n'est pas le cas. Je n'arrive pas à trouver d'où peux venir mon problème, quelqu'un aurez une idée ?

    Voici mon code dans deux fichier .py séparé. Le premier :

    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
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    import sys
    from PyQt5.QtWidgets import QApplication, QMainWindow
     
    #### GUI file made with Qt Designer and translated into python with uic5 ######
    from Gui_python_files.mainwindowspectroGUI import Ui_MainWindowSpectro
    ###############################################################################
     
    #### Function import ##########################################################
    import savedata_spectro
     
    class MainWindowSpectro(QMainWindow, Ui_MainWindowSpectro):
        def __init__(self, *args, obj=None, **kwargs):
            super(MainWindowSpectro, self).__init__(*args, **kwargs)
            self.setupUi(self)
     
            self.pushButtonAcquisition.clicked.connect(self.onPushButtonAcquisitionClicked)
     
            self.tableWidgetShowExperiment = savedata_spectro.SaveDataSpectro(self)
     
        def onPushButtonAcquisitionClicked(self):
           self.SaveDataShow = savedata_spectro.SaveDataSpectro()
           self.SaveDataShow.setWindowModality(QtCore.Qt.ApplicationModal)
           self.SaveDataShow.show()
     
     
     
    if __name__.endswith('__main__'):
     
        if not QApplication.instance():
            MainApp = QApplication(sys.argv)
        else :
            MainApp = QApplication.instance()
     
    mainWindow = MainWindowSpectro()
    mainWindow.show()
     
    rc = MainApp.exec_()
    sys.exit(rc)
     
    ##############################################################################
    os.system("pause")
    et la seconde partie :

    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
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    from PyQt5.QtWidgets import QDialog, QTableWidgetItem
     
    #### GUI file made with Qt Designer and translated into python with uic5 ######
    from Gui_python_files.savedataspectroGUI import Ui_SaveDataSpectro
    from Gui_python_files.mainwindowspectroGUI import Ui_MainWindowSpectro
    ###############################################################################
     
    ###### Function import ########################################################
     
    class SaveDataSpectro(QDialog, Ui_SaveDataSpectro):
        def __init__(self, *args, obj=None, **kwargs):
            super(SaveDataSpectro, self).__init__(*args, **kwargs)
            self.setupUi(self)
     
    ###### Connexion signaux-slot #################################################
     
            self.pushButtonSaveDataOk.clicked.connect(self.onPushButtonSaveDataOkClicked)
     
        def onPushButtonSaveDataOkClicked(self):
            new_item = QTableWidgetItem('&')
            self.tableWidgetShowExperiment.setItem(1, 1,new_item)
            self.close()
    Merci d'avance pour votre aide !

  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,

    La programmation objet a été conçue pour se simplifier la tâche, pas pour la compliquer.

    Il ne faut pas faire d'import en boucle. Ça n'a en plus aucune utilité il suffit de passer une instance de l'objet appelant à l'objet instancié.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        def onPushButtonAcquisitionClicked(self):
           self.SaveDataShow = savedata_spectro.SaveDataSpectro(self)
    et dans ta boîte de dialogue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class SaveDataSpectro(QDialog, Ui_SaveDataSpectro):
        def __init__(self, ui):
            # Remarque ici le nettoyage de tout le brol inutile
            super().__init__()
            self.ui = ui
            ...
     
     
        def onPushButtonSaveDataOkClicked(self):
            new_item = QTableWidgetItem('&')
            self.ui.tableWidgetShowExperiment.setItem(1, 1,new_item)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 21
    Par défaut
    Merci beaucoup pour ton aide, certaines choses m'échappent encore dans la POO, je vais potasser
    J'ai essayé tes modifs sur mon script et ça marche parfaitement !

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

Discussions similaires

  1. Récuperer une même variable depuis plusieurs fonctions
    Par Lord Bouillon dans le forum MATLAB
    Réponses: 15
    Dernier message: 14/09/2015, 11h05
  2. [MySQL-5.1] Autoriser l'accès à un user depuis plusieurs machines
    Par cyril_bft dans le forum Administration
    Réponses: 4
    Dernier message: 03/10/2013, 16h16
  3. Renvoyer plusieur champs depuis une fonction
    Par djorfe dans le forum Langage
    Réponses: 2
    Dernier message: 29/02/2008, 09h54
  4. Réponses: 2
    Dernier message: 19/12/2006, 15h51
  5. [C#][Débutant] Comment appeler la meme fonction depuis plusieurs items d un menu
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 7
    Dernier message: 27/04/2006, 19h39

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