Почему PyQt4 DialogBox OpenFileName зависает, пока другие потоки не закончатся в Linux

В Linux QFileDialog.getOpenFileNames() зависает в скрипте, у которого нет другого графического интерфейса, пока не выполнится другой процесс, даже если он выполняется в отдельном потоке или 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 ответ

Как предположил ехуморо, проблема родом из DialogBox под рабочим столом gtk.

Добавление "options=QtGui.QFileDialog.DontUseNativeDialog" в аргументы getOpenFileNames полностью решает проблему (без остановки или сообщения об ошибке).

Другие вопросы по тегам