Обновите QDialog при запуске логики - PullRequest
0 голосов
/ 06 мая 2020

Итак, в настоящее время я работаю над плагином QGIS Python, и я хочу обновить QDialog с выводом текста, пока выполняется импорт данных из одного файла, а другой выполняется.

Итак, пока он захватывает данные из один файл и вставив его в другой, я хочу, чтобы мой вывод в диалоговом окне тоже выглядел так:

Importing WMS: connection-wms/example/url: abc.com...
Importing WMS: connection-wms/example2/url: abc.com...
Importing WFS: connection-wms/example3/url: abc.com...

и так далее ...

Моя проблема в том, что когда я вызываю exec_ () в диалоговом окне все остальное замирает, как будто оно ждет, пока диалог что-то сделает. Когда я закрываю диалоговое окно, импорт выполняется должным образом.

Я уже пробовал QCoreApplication.processEvents (), но почему-то не могу заставить его работать.

Моя текущая попытка - запустить диалоговое окно в собственный поток, но с потоком из библиотеки потоков, похоже, это не работает.

Вот лог c действия импорта:

class DatasourceDistributor:


def importSources(self):
    self.dialog = ProgressLog()
    self.dialog.exec_()

    self.dictionaryOfCheckedSources = {**self.dictionaryOfCheckedDataBaseSources,
                                       **self.dictionaryOfCheckedWebSources}

    if self.dictionaryOfCheckedSources:
        self.parser.clear()
        self.parser.read(self.sourceQgisIniFile)

        targetParser = configparser.ConfigParser()
        targetParser.optionxform = str
        targetParser.read(self.targetQgisIniFile)

        for key in self.dictionaryOfCheckedSources:
            iterator = 0

            if key in self.availableWebSources:
                if self.parser.has_section('qgis'):
                    for element in range(len(self.dictionaryOfCheckedWebSources[key])):
                        self.importWebSources(iterator, key, targetParser)
                        iterator += 1
            else:
                for element in range(len(self.dictionaryOfCheckedDataBaseSources[key])):
                    self.importDBSources(iterator, key, targetParser)
                    iterator += 1

        with open(self.targetQgisIniFile, 'w') as qgisconf:
            targetParser.write(qgisconf)

    self.profileManager.updateDataSources()

Я загружаю диалог с текст в другом для l oop в self.importWebSources (iterator, key, targetParser)

А вот класс диалога:

class ProgressLog(QDialog):

def __init__(self, *args, **kwargs):
    super(ProgressLog, self).__init__(*args, **kwargs)

    self.setWindowTitle("Importing Datasources...")
    self.setFixedHeight(300)
    self.setFixedWidth(500)
    self.layout = QVBoxLayout()
    self.progesslog = QTextBrowser()
    self.layout.addWidget(self.progesslog)
    self.setLayout(self.layout)

Имейте в виду, что это мой первый контакт с плагинами Qgis, а также с Python

Спасибо!

...