在Linux 下,QFileDialog.getOpenFileNames()冻结在脚本中,在其他进程完成之前没有其他GUI,即使它在单独的线程或Qthread中运行。
我已经在Ubuntu x64 14.04到16.04下进行了测试 (python 3.4.4 / 3.5.1 + libqt4-dev 4.8.6 / 4.8.7 + python3-pyqt4 4.9.1 / 4.11.4)
但令人惊讶的是,在Windows 7下正常工作,没有冻结! (python-3.4.4.amd64 + PyQt4-4.11.4-gpl-Py3.4-Qt4.8.7-x64)
import time
import sys
from PyQt4 import QtGui
from PyQt4.QtCore import QThread
class process(QThread):
def __init__(self, files):
QThread.__init__(self)
self.files = files
def run(self):
print(self.files)
# simulates a long process
for i in range(10):
print(i)
time.sleep(1)
app = QtGui.QApplication(sys.argv)
files = QtGui.QFileDialog.getOpenFileNames()
thread = process(files)
thread.start()
thread.wait()
答案 0 :(得分:1)
正如ekhumoro所说,问题来自gtk桌面下的原生DialogBox。
添加"选项= QtGui.QFileDialog.DontUseNativeDialog" getOpenFileNames的args彻底解决了问题(没有冻结或错误消息)。