@w0lkolak

Переданная в QThread функция подсвечивания текста не выполняется. ЧЯДНТ?

Соль: пишу текстовый редактор с подсветкой. Иногда бывают большие файлы, потому хочу организовать поток дабы не блокировать GUI.
Есть
class MyEdit(QPlainTextEdit):
    def __init__(self, text, base, existing, *args, **kwargs):
        super().__init__(*args, **kwargs)
        ...
        def set_syntax(self):
            print('set syntax1')
            self.highlight = HLSyntax.HL_Syntax.GMHighlighter(self.document())
            print('set syntax2')

есть
class ParentOfMyEdit(QWidget):
    def __init__(self, text, base, existing):
        super().__init__()
        self.editor = MyEdit(text, existing=existing, base=base)
        ...
       self.flow = flow.ThreadClass(func_to_execute=self.editor.set_syntax, percent_panel=self.progress_bar)
              self.flow.stastSignal.connect(self.stast_process)
        self.flow.finishSignal.connect(self.finishSignal_process)

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.timeout_func)
        self.exec_in_thread()

    def stast_process(self, val):
        self.value = val // 100
        self.timer.start(1000)

    def finishSignal_process(self, val):
        self.progress_bar.setValue(100)
        self.timer.stop()
        print(val)

    def timeout_func(self):
        self.progress_bar.setValue(self.value)
        self.value += 10

    def exec_in_thread(self):
        self.progress_bar.setProperty("value", 0)
        self.flow.start()


Наконец, есть класс потока
class ThreadClass(QThread):
    stastSignal = pyqtSignal(int)
    finishSignal = pyqtSignal(str)

    def __init__(self, func_to_execute, percent_panel):
        super().__init__()
        self.func = func_to_execute


    def run(self):
        print('start running')
        value = 1000
        print(self.func)
        self.stastSignal.emit(value)
        self.func()
        print('vse')


Переданная в QThread set_syntax выполняется так как print('set syntax1') и print('set syntax2') внутри неё срабатывают, но вот
self.highlight = HLSyntax.HL_Syntax.GMHighlighter(self.document())
почему то ничего не делает. Более того, self.exec_in_thread() в ParentOfMyEdit вырубит подсветку синтаксиса если я его подключу в ином месте напрямую без потоков.
  • Вопрос задан
  • 38 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы