使用本机对话框时,PyQt QFileDialog不会关闭

时间:2017-01-13 16:57:18

标签: python pyqt

我正在使用PyQt从用户那里获取文件名。我已经开发了一个最小的例子来说明问题。如果我使用静态函数QFileDialog.getOpenFileName,并且我传递了QFileDialog.DontUseNativeDialog,则文件对话框将按预期运行。如果我不提供该选项,则当用户选择文件时,对话框不会关闭。该对话框仅在脚本完成执行后关闭。

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)

当用户选择文件时,如果" DontUseNativeDialog"没有使用,对话将保持到10秒睡眠后。我希望用户单击“确定”或“取消”后立即关闭对话框。

1 个答案:

答案 0 :(得分:1)

大多数routes需要GUImainloop),它会一直运行并在GUI中完成所有工作。

您可以使用event loopa.exec_()中启动mainloop并关闭对话框但是您将遇到如何停止此主循环的问题:)

PyQt可以关闭它,但如果您在a.quit()之前使用它,则a.exec_()不会收到此消息但不会关闭。如果你放在mainloop之后,它将永远不会执行,因为a.exec_()会阻止所有代码,直到你结束a.exec_()。但是,您可以mainloopQTimer一起使用,通知a.quit在启动后执行它。

mainloop
相关问题