Ich verwende PyQt, um einen Dateinamen vom Benutzer abzurufen. Ich habe ein minimales Beispiel entwickelt, um das Problem zu zeigen. Wenn ich die statische Funktion QFileDialog.getOpenFileName verwende und den QFileDialog.DontUseNativeDialog überlasse, verhält sich der Dateidialog wie erwartet. Wenn ich diese Option nicht zur Verfügung stelle, wird der Dialog nicht geschlossen, wenn der Benutzer eine Datei auswählt. Der Dialog wird erst geschlossen, nachdem das Skript die Ausführung abgeschlossen hat.PyQt QFileDialog schließt nicht, wenn das native Dialogfeld verwendet wird
import sys
import time
from PyQt4.QtGui import *
a = QApplication(sys.argv)
filename = QFileDialog.getOpenFileName(None, 'Open File', '.', '*', '*', QFileDialog.DontUseNativeDialog) #works
#filename = QFileDialog.getOpenFileName(None, 'Open File', '.', '*', '*') #doesn't work
a.quit()
a = None
print filename
print "Dialog should be gone"
time.sleep(10)
Wenn der Benutzer eine Datei auswählt, wenn „DontUseNativeDialog“ nicht verwendet wird, wird der Dialog erst nach dem 10 Sekunden Schlaf bleiben. Ich würde erwarten, dass der Dialog geschlossen wird, sobald der Benutzer auf OK oder Abbrechen klickt.
was meinst du 'nativ' - Windows, Linux oder MacOS? – furas
die meisten GUI benötigt 'Hauptschleife' (' Ereignisschleife') zu arbeiten. Sie können 'a.exec _()' (vor 'a = None') verwenden, um die Hauptschleife in PyQt zu starten und es schließt den Dialog, aber dann haben Sie Probleme, diese Hauptschleife zu stoppen :) – furas