1.Справочная информация
Я работаю в Python 3.7
.Версия Python Qt Pyqt5
позволяет запускать пользовательские сигналы pyqt.Например:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyClass(QObject):
mysignal = pyqtSignal(str)
def __init__(self):
super().__init__()
self.mysignal.connect(self.bar)
return
def foo(self):
self.mysignal.emit("foobar")
return
@pyqtSlot
def bar(self, mystr):
print("signal received: {0}".format(mystr))
return
2.Проблема
PyQt запускает цикл прослушивания событий в главном потоке: он ожидает входящие события в очереди и обрабатывает их один за другим.Большинство из этих событий являются вызываемыми пользователем вещами, такими как нажатие кнопки, нажатие чего-либо, ...
Если вы запускаете сигналы pyqt программно, как в функции foo()
выше, вы также помещаете события в эту очередь (Я думаю).Это не должно иметь большого значения, если вы не используете слишком много сигналов Pyqt в короткой серии.Очередь перегружена, и пользовательские события не обрабатываются вовремя.Пользователь видит заблокированный графический интерфейс. Yikes!
3.Решение
Одним из способов решения этой проблемы может быть назначение низких приоритетов программно запущенному сигналу Pyqt.Это возможно?Как?
Если нет - знаете ли вы другие способы решения проблемы?