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 :

Comment executer une action à l'ouverture d'une fenêtre ?


Sujet :

PyQt Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 57
    Points : 41
    Points
    41
    Par défaut Comment executer une action à l'ouverture d'une fenêtre ?
    Bonsoir,

    Cela fait des heures que je recherche comment exécuter une action à l'ouverture d'une fenêtre

    J'ai trouvé comment exécuter une action à la fermeture mais pas à l'ouverture.

    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "self.form.open.connect(self.Remplir_ComboBox)"
    mais j'obtiens cette erreur :
    AttributeError: 'NoneType' object has no attribute 'connect'
    Pouvez-vous m'indiquer comment faire ou bien où chercher ?

    Merci de votre aide.

    Je joint mon petit exercice

    Fic debut.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import sys
    from PyQt5.QtWidgets import QApplication
    from main import Main
     
     
    app = QApplication(sys.argv)
    uMain = Main()
     
     
     
    sys.exit(app.exec())
    Fic Main.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
     
    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
    from PyQt5.QtGui import QIcon
    #from ImageViewerUI import Ui_MainWindow
    from VisuCli import Ui_Form_visucli
    import sys
     
     
     
    class Main(QMainWindow):
     
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
     
            self.initUI()
     
        def initUI(self):
            self.setGeometry(0, 0, 500, 500)
     
            ouvrirAction = QAction('&Ouvrir Visu Artistes', self)
            ouvrirAction.setShortcut('Ctrl+O')
            ouvrirAction.setStatusTip('Ouvrir Visu Artistes')
            ouvrirAction.triggered.connect(self.on_open)
     
            fermerAction = QAction('&Fermer Visu Artistes', self)
            fermerAction.setShortcut('Ctrl+F')
            fermerAction.setStatusTip('Fermer Visu Artistes')
            fermerAction.triggered.connect(self.on_close)
     
            self.statusBar()
            # QMainWindow.menuBar()
     
            menubar = self.menuBar()
            fileMenu = menubar.addMenu('&File')
            fileMenu.addAction(ouvrirAction)
            fileMenu.addAction(fermerAction)
     
            self.setWindowTitle('PyQt5 Fenêtre principale')
     #      self.show() #Affiche la fenêtre Main
            self.init_dialog()
            Main.show(self) #Affiche la fenêtre Main (en fait la classe Main
     
        def init_dialog(self):
            self.form = QtWidgets.QDialog()
            self.ui = Ui_Form_visucli()
            self.ui.setupUi(self.form)
     
            #self.ui.LineEd_nom.setText('coucou')
            #self.ui.label_nom.setText('Nom')
            self.form.setWindowModality(QtCore.Qt.ApplicationModal)
    #        self.form.finished.connect(self.on_close) #Se déclenche lorsque la fenêtre VisuCli se ferme
            self.form.open.connect(self.Remplir_ComboBox)
     
        def on_open(self):
            print ("Ouverture de VisuArtiste")
            self.form.open()
     
     
        def Remplir_ComboBox():
            print ("Remplissage")
     
     
        def on_close(self):
            print ("Fermeture du programme")
            quit()
     
    # ----------------------------------------------------------------------------------------------------------------------
     
    if __name__ == '__main__':
     
        app = QApplication(sys.argv)
        ex = Main()
        ret = app.exec_()
        sys.exit(ret)

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    Tu remplaces ceci self.form.open.connect(self.Remplir_ComboBox) par cela self.Remplir_ComboBox().

    Et aussi ceci Main.show() par self.show().

    ... et il te manque le self dans ta méthode Remplir_ComboBox.

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 483
    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 483
    Points : 9 282
    Points
    9 282
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour lancer une action au lancement de la fenêtre, définie par une méthode de cette fenêtre (par exemple "self.lancement()):

    - appeler cette méthode à la fin de "__init__(...)". Cependant, l'action sera exécutée avant que la fenêtre ne soit affichée.

    - si on veut que l'action soit exécutée alors que la fenêtre est déjà affichée, il suffit d'appeler cette méthode après le "ex = Main()" et le "ex.show()"

    Pour la fermeture de la fenêtre:

    - pour une fermeture demandée par l'utilisateur (clic sur un bouton ou ligne de menu), il suffit que le signal déclenchée par cette action appelle la méthode à utiliser pour la fermeture (self.quitter() par exemple).

    - mais si on ferme la fenêtre en cliquant sur le bouton X de la fenêtre ou par son menu système, ça ne marche plus. Dans ce cas, il faut savoir que le widget de la fenêtre a une méthode "closeEvent" qui est appelée dans tous les cas de fermeture. Ce qui est très intéressant par exemple pour demander à l'utilisateur s'il veut vraiment fermer en perdant ses données. Et selon les cas, on peut accepter la fermeture (event.accept()) ou la refuser (event.ignore()).

    Pour ce dernier point, voir ici: https://doc.qt.io/qt-5/qwidget.html#closeEvent.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 57
    Points : 41
    Points
    41
    Par défaut
    Bonsoir,

    Merci à vous 2, ça marche.

    @tyrtamos: Le lien que tu donnes c'est pour du c++. C'est pareil en python je suppose ?

    J'ai une autre question, lorsque la 2eme fenêtre s'ouvre je peux sélectionner un item dans le combobox.
    Comment connecter cet évènement à une action (un print par exemple)

    Je vais ouvrir un autre post.
    Merci à vous

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

Discussions similaires

  1. [AC-2003] comment executer une action apres detection activité du curseur
    Par chuspyto dans le forum IHM
    Réponses: 8
    Dernier message: 26/10/2010, 15h34
  2. [C#] Comment exécuter une instruction dynamiquement ?
    Par NeoMan dans le forum Contribuez
    Réponses: 11
    Dernier message: 15/01/2009, 17h45
  3. [BDD] Comment Executer Une SP Mysql avec ADODB depuis PHP
    Par audreyc dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 30/03/2006, 13h17
  4. Comment executer une requête ?
    Par uloaccess dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 09/11/2005, 18h26
  5. Réponses: 4
    Dernier message: 03/12/2004, 12h18

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