Я пытаюсь создать рабочий поток, задачей которого является отслеживание бита состояния платформы позиционирования.
Для этого я подключаю сигнал тайм-аута QTimer к функции, которая запрашивает платформу.
class expSignals(QtCore.QObject):
pause=QtCore.pyqtSignal()
class motorpositioner(QtCore.QObject):
def __init__(self):
QtCore.QThread.__init__(self)
self.timer = QtCore.QTimer()
self.timer.start(100)
self.timer.timeout.connect(self.do_it)
self.lock=QtCore.QMutex()
self.running=True
self.stat=0
def do_it(self):
with QtCore.QMutexLocker(self.lock):
#self.stat = self.motors.get_status()
print(self.stat)
time.sleep(5)
@QtCore.pyqtSlot()
def stop1(self):
self.timer.stop()
print('stop heard')
Материал GUI выглядит следующим образом:
class MyApp(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.thread=QtCore.QThread(self)
#worker
self.mot=motorpositioner()
# =============================================================================
# Putting buttons and GUI stuff in place
# =============================================================================
self.button=QtWidgets.QPushButton('Derp',self)
layout = QtWidgets.QHBoxLayout()
layout.addWidget(self.button)
self.setLayout(layout)
self.setGeometry( 300, 300, 350, 300 )
# =============================================================================
# Connecting signals
# =============================================================================
self.sig=expSignals()
self.sig2=expSignals()
self.button.clicked.connect(self.stop)
self.sig.pause.connect(self.mot.stop1)
self.sig2.pause.connect(self.thread.quit)
self.mot.moveToThread(self.thread)
self.thread.start()
def stop(self):
self.sig.pause.emit()
def closeEvent(self,event):
self.sig2.pause.emit()
event.accept()
Однако, как это написано сейчас, графический интерфейс не отвечает. Однако, если я закомментирую self.timer.timeout.connect(self.do_it)
и поставлю do_it
в цикл while(True)
, графический интерфейс не будет заблокирован.
Почему основной поток блокируется при использовании QTimer?
expSignals
? - person eyllanesc   schedule 12.07.2018