Соль: пишу текстовый редактор с подсветкой. Иногда бывают большие файлы, потому хочу организовать поток дабы не блокировать 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 вырубит подсветку синтаксиса если я его подключу в ином месте напрямую без потоков.