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 :

[PyQt 4.4] Fenêtre vide avec getExistingDirectory


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 5
    Par défaut [PyQt 4.4] Fenêtre vide avec getExistingDirectory
    Bonjour, bonjour !

    Cela fait tout juste quelques mois que j'ai commencé le Python et je m'en sortais à peu près jusqu'ici, mais j'ai rencontré un souci que je n'arrive vraiment pas à régler...

    Je travaille avec PyQt 4.4 et j'ai rencontré un problème semblable à celui de fbmfbm : j'appelle effectivement à un moment donné getExistingDirectory, mais la fenêtre qui s'ouvre alors est vide (ou presque) et je ne peux pas naviguer dans mes dossiers pour en choisir un.
    Pour lui, ce problème ne se manifestait que sous Vista : je précise donc que je travaille sous Windows 2000 Professional.

    Voici l'extrait de mon code concerné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    name = QtGui.QFileDialog.getExistingDirectory(self, 'Save Results to...', self.SaveResultsTo.text(), QtGui.QFileDialog.ShowDirsOnly)
    Et le résultat obtenu est alors visible dans mon image en pièce jointe.

    Je ne rencontre ce problème qu'avec getExistingDirectory : j'utilise aussi getOpenFileName et getSaveFileName qui fonctionnent parfaitement.

    J'ai pas mal cherché sur la toile, mais je n'ai trouvé que des mentions de ce problème, aucune solution. Mes collègues sont aussi perdus que moi, d'autant qu'un code semblable s'exécute normalement sur d'autres machines...

    Merci beaucoup à ceux qui pourront me répondre.

    Cordialement,
    Koghiba
    Images attachées Images attachées  

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 828
    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 828
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Koghiba Voir le message
    Bonjour, bonjour !

    Cela fait tout juste quelques mois que j'ai commencé le Python et je m'en sortais à peu près jusqu'ici, mais j'ai rencontré un souci que je n'arrive vraiment pas à régler...

    Je travaille avec PyQt 4.4 et j'ai rencontré un problème semblable à celui de fbmfbm : j'appelle effectivement à un moment donné getExistingDirectory, mais la fenêtre qui s'ouvre alors est vide (ou presque) et je ne peux pas naviguer dans mes dossiers pour en choisir un.
    Pour lui, ce problème ne se manifestait que sous Vista : je précise donc que je travaille sous Windows 2000 Professional.

    Voici l'extrait de mon code concerné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    name = QtGui.QFileDialog.getExistingDirectory(self, 'Save Results to...', self.SaveResultsTo.text(), QtGui.QFileDialog.ShowDirsOnly)
    Et le résultat obtenu est alors visible dans mon image en pièce jointe.

    Je ne rencontre ce problème qu'avec getExistingDirectory : j'utilise aussi getOpenFileName et getSaveFileName qui fonctionnent parfaitement.

    J'ai pas mal cherché sur la toile, mais je n'ai trouvé que des mentions de ce problème, aucune solution. Mes collègues sont aussi perdus que moi, d'autant qu'un code semblable s'exécute normalement sur d'autres machines...

    Merci beaucoup à ceux qui pourront me répondre.

    Cordialement,
    Koghiba
    Le 3° paramètre de "getExistingDirectory" est le dossier à ouvrir (ce que tu nommes "self.SaveResultsTo.text()"). Vérifie donc le contenu de cette variable (histoire d'être sûr qu'elle contient bien un nom de dossier valide)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 5
    Par défaut
    Bonjour, Sve@r, et merci de te pencher sur mon problème.

    La variable en question correspond bel et bien à un nom de dossier existant : j'ai d'ailleurs essayé en modifiant ladite variable, voire même en la remplaçant directement par le nom d'un dossier (avec le chemin correspondant, comme "C:/", pour faire simple) ou même de ne rien compléter du tout (avec un ....getExistingDirectory(None)), mais rien n'y fait, mon problème reste identique... ^^"

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 828
    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 828
    Billets dans le blog
    1
    Par défaut
    J'ai développé un petit test (basé sur un petit truc perso me permettant de vérifier des éléments de Qt)

    Recopie ce code suivant dans un petit fichier "toto.py" et exécute-le...
    Code Python : 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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    #!/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):
     
    		# Message de contrôle
    		print "QtAppli (qt v%s, pyqt_v%s)" % (QT_VERSION_STR, PYQT_VERSION_STR)
     
    		# 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 (v%s)" % QT_VERSION_STR)
     
    		# Un espace de rangement
    		box=QVBoxLayout(self.wid.centralWidget())
     
    		# Le bouton de test
    		btn=QPushButton()
    		btn.setText("Test getDirectory")
    		self.connect(btn, SIGNAL("clicked()"), self.slotAction)
    		box.addWidget(btn)
     
    		# Le bouton version
    		ver=QPushButton()
    		ver.setText("A propos de Qt")
    		self.connect(ver, SIGNAL("clicked()"), self.slotQt)
    		box.addWidget(ver)
     
    		# Pour quitter
    		quit=QPushButton()
    		quit.setText("Quitter")
    		self.connect(quit, SIGNAL("clicked()"), self.wid, SLOT("close()"))
    		box.addWidget(quit)
    	# __init__()
     
    	# Affichage et lancement application
    	def run(self):
    		self.wid.show()
    		self.exec_()
    	# run()
     
    	# Slot qui affiche un dossier
    	def slotAction(self):
    		print "test getDirectory"
    		name=QFileDialog.getExistingDirectory(
    			self.wid.centralWidget(),
    			'Save Results to...',
    			"c:/",
    			QFileDialog.ShowDirsOnly
    		)
    	# slotAction()
     
    	# Slot qui affiche la version de Qt
    	def slotQt(self):
    		print "qt"
     
    		# Fenêtre "A propos de Qt"
    		QMessageBox.aboutQt(
    			self.wid,
    			"à propos de Qt...",
    		)
    	# slotQt()
    # class QtAppli
     
    Appli=QtAppli(sys.argv)
    Appli.run()

    Chez-moi, ça fonctionne. Si ça fonctionne chez-toi, ce qui est très probable, c'est que le problème ne vient pas de ton appel à la fonction getExistingDirectory()
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 5
    Par défaut
    Alors effectivement, ton code fonctionne bien et ce même après que je l'ai un peu modifié pour qu'il soit encore plus proche de ce que j'ai fait moi-même.
    J'ai alors tenté de le mettre dans mon programme et là, ça ne marchait plus...
    Je ne comprends pas pourquoi, mais il semblerait que mon problème apparaisse uniquement si j'importe un autre fichier (correspondant à une autre fenêtre générée avec QtDesigner) : tout va bien dès lors que je passe l'importation en commentaire (ce qui implique de commenter aussi ce qui s'y rapporte), alors que ça n'a normalement rien à voir dans le programme.
    D'ailleurs, si au lieu d'appeler directement getExistingDirectory, je lance un thread pour l'exécuter, la fenêtre s'affiche correctement. Si cela fonctionne, il ne me resterait plus qu'à comprendre comment je peux récupérer le retour depuis un thread pour que le programme marche comme il faut...
    Cela dit, je ne comprends tout de même pas pourquoi ça va de travers...

    Si tu as une explication, je suis preneur... ^^"

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 828
    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 828
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Koghiba Voir le message
    Alors effectivement, ton code fonctionne bien et ce même après que je l'ai un peu modifié pour qu'il soit encore plus proche de ce que j'ai fait moi-même.
    J'ai alors tenté de le mettre dans mon programme et là, ça ne marchait plus...
    Je ne comprends pas pourquoi, mais il semblerait que mon problème apparaisse uniquement si j'importe un autre fichier (correspondant à une autre fenêtre générée avec QtDesigner) : tout va bien dès lors que je passe l'importation en commentaire (ce qui implique de commenter aussi ce qui s'y rapporte), alors que ça n'a normalement rien à voir dans le programme.
    D'ailleurs, si au lieu d'appeler directement getExistingDirectory, je lance un thread pour l'exécuter, la fenêtre s'affiche correctement. Si cela fonctionne, il ne me resterait plus qu'à comprendre comment je peux récupérer le retour depuis un thread pour que le programme marche comme il faut...
    Cela dit, je ne comprends tout de même pas pourquoi ça va de travers...

    Si tu as une explication, je suis preneur... ^^"
    Perso moi je n'utilise QDesigner que pour regarder comment on code certains trucs mais ensuite je code toute mon IHM à la main. J'arrive pas à m'y faire à cet outil.
    Essaye de regarder dans ton truc importé si par hasard t'aurais pas un objet qui écraserait un objet générique Qt (une fois j'ai appelé une de mes variable "id" je t'explique pas le massacre quand ailleurs j'appelais la méthode "id()")

    Et si ton source n'est pas trop gros, dépose-le ici...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Fenêtre Windows avec PyQt
    Par nOwXO dans le forum PyQt
    Réponses: 12
    Dernier message: 08/12/2013, 17h09
  2. [Forms 9.0.4] Fenetre vide avec juste le menu?
    Par Aeternus dans le forum Forms
    Réponses: 7
    Dernier message: 22/06/2007, 15h11
  3. Fenêtres multiples avec la librairie SDL
    Par pierrev1 dans le forum SDL
    Réponses: 4
    Dernier message: 10/12/2006, 11h36
  4. [JFrame] Taille de la fenêtre complète (avec titre et bordures)
    Par RXN dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 23/09/2005, 23h35
  5. Appariton d'une fenêtre vide
    Par dedeloux dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 25/07/2005, 17h51

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