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 :

Affichage de sous-fenêtres : elles restent au premier plan


Sujet :

PyQt Python

  1. #1
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 738
    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 738
    Points : 31 067
    Points
    31 067
    Billets dans le blog
    1
    Par défaut Affichage de sous-fenêtres : elles restent au premier plan
    Bonjour à tous

    J'ai un problème tout con => j'ai une fenêtre X qui, lors d'un clic sur un bouton, affiche une fenêtre Y (non modale)

    En théorie, je devrais pouvoir basculer de la fenêtre X sur la Y et inversement. Dans les faits, ça marche sauf que la fenêtre X reste toujours affichée sous la Y. Si je veux la voir en entier, il me faut déplacer la fenêtre Y plus loin.

    Si vous voulez voir le code, j'ai sûrement raté un truc...
    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
    #!/usr/bin/env python
    # coding: Latin-1 -*-
    import sys
    try:
    	from PyQt4.QtCore import *
    	from PyQt4.QtGui import *
    except:
    	import time
    	for i in range(10):
    		print "PyQT non installé - A vérifier (%d/10)" % (i + 1)
    	time.sleep(5)
    	sys.exit(1)
     
     
    class QtAppli(QApplication):
    	"Fenêtre de l'application"
     
    	# Constructeur fenêtre
    	def __init__(self,
    			argv):
     
    		# Appel constructeur de l'objet hértié
    		QApplication.__init__(self, argv)
     
    		# Attributs de l'application
    		self.argv=argv
     
    		# Widget principale
    		self.wid=QMainWindow()
    		self.wid.setCentralWidget(QWidget(self.wid))
    		self.wid.statusBar()
     
    		# Titre
    		self.wid.setWindowTitle("Vérification QT")
     
    		# Un espace de rangement
    		box=QVBoxLayout(self.wid.centralWidget())
     
    		# Le bouton
    		btn=QPushButton(self.wid.centralWidget())
    		btn.setText("Test QT")
    		self.connect(btn, SIGNAL("clicked()"), self.slotAction)
    		box.addWidget(btn)
     
    		# Pour quitter
    		quit=QPushButton(self.wid.centralWidget())
    		quit.setText("Quitter")
    		self.connect(quit, SIGNAL("clicked()"), self, SLOT("quit()"))
    		box.addWidget(quit)
     
    	# Affichage et lancement application
    	def run(self):
    		self.wid.show()
    		self.exec_()
     
    	# Slot qui affiche une fenêtre avec un texte
    	def slotAction(self):
    		print "clicked"
     
    		dial=QDialog(self.wid)
    		dial.setWindowTitle("Félicitations, QT fonctionne parfaitement !!!")
     
    		layout=QVBoxLayout(dial)
     
    		lab=QLabel("<center><font size='+5'><font color='red'>CLICKED</font></font></center>")
    		layout.addWidget(lab)
     
    		btn=QPushButton(dial)
    		btn.setText("Félicitations, QT fonctionne parfaitement !!!")
    		btn.connect(btn, SIGNAL("clicked()"), dial, SLOT("close()"))
    		layout.addWidget(btn)
    		dial.show()
     
    Appli=QtAppli(sys.argv)
    Appli.run()
    Merci

  2. #2
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    bonjour, vérifie que QDialog ne crée pas un modale.
    En C# c'est le cas.

    A+

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 738
    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 738
    Points : 31 067
    Points
    31 067
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par airod Voir le message
    bonjour, vérifie que QDialog ne crée pas un modale.
    Il possède la méthode setModal() qu'on peut activer => dans ce cas on n'a plus accès à la fenêtre appelante mais là ce n'est pas le cas puisque j'ai toujours accès à la fenêtre parente et je peux de nouveau recliquer sur le bouton de création (ce qui me génère une 2° fenêtre etc...)
    C'est juste que la fenêtre parente, quoi que je fasse, reste sous la fenêtre enfant. Si la fenêtre enfant n'en recouvre qu'un quart j'ai accès aux trois autres quart de la fenêtre parente, je peux déplacer l'enfant pour la mettre plus loin ce qui me donne un total accès à la fenêtre parente mais si la fenêtre enfant vient recouvrir en partie la fenêtre parente, ben actuver la parente ne la fait pas passer par dessus (comme c'est le cas avec l'IHM Windows).

    Autre remarque => le problème ne se pose pas en Qt/C++

    Citation Envoyé par airod Voir le message
    En C# c'est le cas.
    Bizarre. Je connais pas le C# mais tu confonds pas avec la QMessageBox ???

  4. #4
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    as tu essayé

    je pense qu"un dialog s'affiche topujours sur sa fenetre maitresse.
    sinon, c'est comme si on crée une nouvelle fenetre, non !

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 738
    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 738
    Points : 31 067
    Points
    31 067
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par airod Voir le message
    as tu essayé

    A l'instant => la fenêtre apparaît puis disparaît aussitôt. Ensuite je remplace dial.show() par dial.exec_() et là, j'ai plus du tout accès à la fenêtre parente => mon dial est devenu modal...


    [EDIT] => J'ai compris => Le slot crée une variable locale qui est aussitôt détruite
    Il me suffit de d'affecter le QDialog() à une variable de la classe et celle-ci reste vivante et la fenêtre se comporte comme il faut.
    Merci

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

Discussions similaires

  1. VBA Outlook : fenêtre de dialogue au premier plan
    Par Phileo dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 18/11/2011, 12h06
  2. Fenêtre en permanence au premier plan !
    Par InfoNewbie dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 28/11/2008, 15h39
  3. [MDI] fenêtre fille toujours au premier plan
    Par JuTs dans le forum Windows Forms
    Réponses: 5
    Dernier message: 01/04/2007, 11h14
  4. Fenêtre "boîte à outil" au premier plan
    Par Antoine88 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/10/2006, 15h01
  5. Faire une fenêtre qui reste au premier plan
    Par Mandelbrot dans le forum Windows
    Réponses: 6
    Dernier message: 13/03/2006, 20h34

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