Quelques questions sur les signaux et les slots
Bonjour bonjour,
Voila je m'autoforme a PyQt, et j'ai quelques questions dont ej n'ai aps vraiment trouvé de réponse claires sur le net.
je voudrais tout simplement faire une ouverture de fichier.
Je défini donc une class mafenetre.
dans cette fenêtre je mets un pushbutton "parcourir" qui lorsqu'il est cliqué, ouvre une nouvelle fenêtre qui est un QFileDialog().
Au niveau du connect j'ai :
Code:
1 2
|
QObject.connect(self.parcourir, SIGNAL("clicked()"), self.ouvrirnavig) |
ouvrirnavig lance donc le QFiledialog.
sauf que je veux récupérer le chemin du fichier ouvert.
Donc a l'heure actuelle pour ca, je passe par une variable globale, mais ca me plait pas trop...
Et surtout le problème c'est que je voudrais lancer quelque chose derrière ce connect, mais une fois que le fichier est sélectionné.
Donc j'essaye de capter le signal envoyé par QFileDialog : FileSelected.
Sauf que ca marche pas, cette connection est à True meme si je n'ai pas encore clické sur le bouton parcourir...
Mon code dans l'etat actuel (j'ai essayé avec accepted ou FileSelected, ca revient au meme.) :
Code:
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
|
class maFenetre(QWidget):
global chemin_fichier
chemin_fichier=""
def __init__(self):
super(maFenetre,self).__init__()
global chemin_fichier
chemin_fichier=""
self.resize(300,300)
self.objet = QFileDialog()
txt = QLabel("Bonjour \nSelectionnez la manip a lancer :",self)
self.parcourir = QPushButton("Parcourir",self)
self.parcourir.move(150,150)
self.run()
def run(self):
test = False
QObject.connect(self.parcourir, SIGNAL("clicked()"), self.ouvrirnavig)
test = QObject.connect(self.objet, SIGNAL("accepted()"), self.rien)
print test
def ouvrirnavig(self):
global chemin_fichier
self.objet.setWindowFlags(Qt.WindowSystemMenuHint)
chemin_fichier = str(self.objet.getOpenFileName(QWidget(), QString(), QString("/home/Work/tscope"), QString("*.c")))
print "ouvrir :" + chemin_fichier
def rien(self):
print "on passe dans rien" |
En sorti j'ai :
donc le signal accepted est bien capté, mais par contre ca lance pas "rien"
Donc la question est pourquoi je capte le accepted avant d'avoir choisi mon fichier et comment faire pour que le programme attende ce signal pour continuer ? (autrement que par un while signal pas recu ) :
Au passage si vous voyez des aberrations au niveau de l'utilisation des self, je suis preneur de conseils aussi.