为什么PyQt4 DialogBox OpenFileName会冻结,直到其他线程在Linux下完成

时间:2016-03-10 20:43:05

标签: python python-3.x qt4 pyqt4 freeze

在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()

1 个答案:

答案 0 :(得分:1)

正如ekhumoro所说,问题来自gtk桌面下的原生DialogBox。

添加"选项= QtGui.QFileDialog.DontUseNativeDialog" getOpenFileNames的args彻底解决了问题(没有冻结或错误消息)。