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 :

Deux fenêtres en même temps


Sujet :

PyQt Python

  1. #1
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut Deux fenêtres en même temps
    Bonjour,
    quelqu'un aurait-il un exemple simple dans lequel on a une fenêtre principale depuis laquelle on ouvre une autre qui reste affichée sans bloquer la fenêtre principale, et qui communique aussi avec cette dernière ?

    Je veux le même comportement que les boîtes de dialogue de remplacement.

    Toute info. est la bienvenue.

  2. #2
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 160
    Points : 91
    Points
    91
    Par défaut
    Salut, cela ne t'aidera peut être pas beaucoup mais sous Tk, j'ai fait cela, une fenêtre de recherche restant toujours au dessus mais ne bloquant pas la fenêtre principale : c'était un toplevel en "transient" mais non "modal" pour ne pas bloquer.

    Malheureusement je ne sais pas comment faire sous pyQt mais cela te donnera peut être une piste...

    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
      # Search functions of the sequence tab
        def rechercher(self, event=None):
            """Search window"""
            def recherche(direction):
                self.subseq = self.dispsubseq.get()
                if self.subseq == "":
                    tkMessageBox.showinfo(self.w_appli.lalangue["warning"],
                                          self.w_appli.lalangue["enterasequence"])
                else:
                    if self.checkcpst.get() == 1:
                        self.subseq = reverse(complement(self.subseq))
                    self.trouver(self.subseq, direction)
            self.nbfenrech = self.nbfenrech + 1
            if self.nbfenrech == 1:
                self.fenrech = Toplevel(self)
                self.fenrech.protocol("WM_DELETE_WINDOW", self.fermerech)#to have only one instance of search window
                self.fenrech.transient(self)
                self.fenrech.geometry("+%d+%d" % (self.winfo_rootx()+50, self.winfo_rooty()+50))
                self.fenrech.title(self.w_appli.lalangue["find"])
                self.dispsubseq = Entry(self.fenrech, width=40)
                self.dispsubseq.grid(row=0, column=0, columnspan=2)
                self.checkcpst = IntVar()
                self.complemstrand = Checkbutton(self.fenrech, text=self.w_appli.lalangue["complementstrand"],
                                                 variable=self.checkcpst)
                self.complemstrand.grid(row=1, column=0)
                self.checkcase = IntVar()
                self.casecare = Checkbutton(self.fenrech, text=self.w_appli.lalangue["caseinsensitive"],
                                            variable=self.checkcase)
                self.casecare.grid(row=1, column=1)
                self.casecare.select()
                self.up = Button(self.fenrech, text=self.w_appli.lalangue["previous"],
                                 command=lambda : recherche(1))
                self.up.grid(row=2, column=0, sticky=W)
                self.down = Button(self.fenrech, text=self.w_appli.lalangue["next"],
                                   command=lambda : recherche(0))
                self.down.grid(row=2, column=1, sticky=E)
                self.dispsubseq.focus()
            else:
                self.fenrech.focus()
    [EDIT] : peut être une piste ici :
    http://qt.developpez.com/doc/4.3/qdialog/

    Modeless Dialogs
    A modeless dialog is a dialog that operates independently of other windows in the same application. Find and replace dialogs in word-processors are often modeless to allow the user to interact with both the application's main window and with the dialog.

  3. #3
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    En utilisant setWindowFlags() :
    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
    # -*- coding: ISO-8859-1 -*-
    #!/usr/bin/env python
     
    from PyQt4 import QtCore, QtGui
    import sys
     
     
    class Window(QtGui.QWidget):
        def __init__(self, parent = None):
            QtGui.QWidget.__init__(self, parent)
            self.setWindowTitle(self.tr("Principale"))
            but=QtGui.QPushButton()
            but.setText(self.tr("Nouvelle fenêtre"))
            self.text=QtGui.QTextEdit()
            self.connect(but, QtCore.SIGNAL("clicked()"), self.newWindow)
            layout=QtGui.QVBoxLayout()
            layout.addWidget(but)
            layout.addWidget(self.text)
            self.setLayout(layout)
     
        def newWindow(self):
            self.new=NewWindow(self)
            self.new.setWindowFlags(QtCore.Qt.Window)
            self.new.show()
     
    class NewWindow(QtGui.QWidget):
        def __init__(self, parent = None):
            QtGui.QWidget.__init__(self, parent)
            self.parent=parent
            self.setWindowTitle(self.tr("nouvelle fenetre"))
            but=QtGui.QPushButton()
            but.setText(self.tr("Click"))
            self.connect(but, QtCore.SIGNAL("clicked()"), self.onClik)
            layout=QtGui.QVBoxLayout()
            layout.addWidget(but)
            self.setLayout(layout)
     
        def onClik(self):
            self.parent.text.append("Clik")
     
    if __name__=='__main__':
        app = QtGui.QApplication(sys.argv)
        ui = Window()
        ui.show()
        sys.exit(app.exec_())

  4. #4
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    C'est parfait comme exemple, j'adore !

    Merci beaucoup.

    PS : pierjean puis-je utiliser ton exemple dans mon futur tuto. pour débuter avec PyQt dont les 1ers paragraphes apparaîtront normalement cet été (peut-être sur ce site) ? Je mets toujours mes sources.

  5. #5
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 160
    Points : 91
    Points
    91
    Par défaut
    Question à PierJean :

    est il possible comme pour "transient" sous Tk de garder la fenetre secondaire toujours au dessus de la fenetre principale tout en restant "non modal"?
    En effet dans ton exemple, si on reclique sur la fenetre principale, celle ci passe au dessus de la fenetre secondaire.

  6. #6
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 160
    Points : 91
    Points
    91
    Par défaut
    C'est bon, j'ai trouvé, t'embête pas pierjean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.new.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.WindowStaysOnTopHint)

  7. #7
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Citation Envoyé par atalon1 Voir le message
    est il possible comme pour "transient" sous Tk de garder la fenetre secondaire toujours au dessus de la fenetre principale tout en restant "non modal"?
    En effet dans ton exemple, si on reclique sur la fenetre principale, celle ci passe au dessus de la fenetre secondaire.
    Merci d'avoir posé et résolu cette question. Cela me sera utile.

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

Discussions similaires

  1. [JFrame] Désiconifier toutes les autres fenêtres en même temps
    Par stoukou dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 07/10/2005, 12h01
  2. Modifier deux champs en même temps!!!
    Par Invité dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 08/09/2005, 20h31
  3. Comptez sur deux tables en même temps
    Par genova dans le forum Langage SQL
    Réponses: 12
    Dernier message: 13/09/2004, 18h58
  4. [JFrame]pb de lancement de deux JFrame en même temps
    Par spoutyoyo dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 24/08/2004, 15h33
  5. Lancer deux sons en même temps...
    Par Julien_riquelme dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 03/05/2003, 17h00

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