Под Linux, в QFileDialog.getOpenFileNames() замерзают в сценарии, которые не имеют никакого другого GUI, пока другой процесс не делал, даже если он работает в отдельном потоке или QThread.Почему PyQt4 DialogBox OPENFILENAME замерзнуть, пока другие потоки не закончат под Linux
Я испытан под 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, без замерзания! (питон-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()
Невозможно воспроизвести какие-либо проблемы в Linux. Точно, когда это «замораживание» должно произойти? – ekhumoro
DialogBox замерзает после нажатия кнопки открытия или попытки закрыть окно. Замораживание сохраняется до тех пор, пока контур не напечатает 10 раз в терминале. Пожалуйста, опишите свою окружающую среду. – astacus
Я тестирую на arch-linux. Я подозреваю, что разница в том, что вы получаете собственный диалог gtk, тогда как я получаю kde one. Попробуйте использовать опцию 'DontUseNativeDialog'. Или попробуйте поместить 'app.processEvents()' после строки 'getOpenFileNames'. – ekhumoro