Не отвечает программа
При запуске зависает и ничего не происходит.
Ошибки тоже нет.
Всё произошло после добавления новой библеотеки Paho и кода связанного с ней.
import sys
import time
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import paho.mqtt.subscribe as subscribe
class Window(QMainWindow):
def __init__(self):
QWidget.__init__(self)
self.setWindowTitle("qq")
self.setGeometry(400, 400, 400,400)
self.runBtn = QtWidgets.QPushButton()
self.runBtn.setCheckable(True)
self.runBtn.setText("Y")
self.runBtn.setGeometry(300,300,300,300)
self.runBtn.setObjectName("runBtn")
self.runBtn.clicked.connect(self.runProcess)
self.runBtn.show()
while(True):
self.statusLight = subscribe.simple("Light/forvard", hostname="192.168.1.100", auth = {"username":"skorpia1231", "password":"n-12345678"})
if statusLight.payload == "b'0'":
self.runProcess(self)
def runProcess(self):
time.sleep(1)
self.runBtn.setChecked(0)
print("hello") # how should this be done?
def appli():
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
appli()
Ответы (2 шт):
Автор решения: Anton Kolesov
→ Ссылка
while(True):
self.statusLight = subscribe.simple("Light/forvard", hostname="192.168.1.100", auth = {"username":"skorpia1231", "password":"n-12345678"})
Похоже, что вы входите в вечный цикл, при этом обработка результата идет ниже него
Автор решения: S. Nick
→ Ссылка
Нельзя использовать в основном потоке ни while(True), ни time.sleep(1) - это замораживает интерфейс.
Я не знаком с библиотекой Paho, поэтому не могу проверить ее работу.
Но предполагаю, что ваше приложение может выглядеть примерно так.
import sys
import time
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import paho.mqtt.subscribe as subscribe
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
class WorkThread(QtCore.QThread):
threadSignal = QtCore.pyqtSignal(bool)
def __init__(self):
super().__init__()
def run(self):
while(True):
self.statusLight = subscribe.simple(
"Light/forvard",
hostname="192.168.1.100",
auth={"username":"skorpia1231",
"password":"n-12345678"}
)
if statusLight.payload == "b'0'":
# self.runProcess(self)
self.threadSignal.emit(True)
self.msleep(5000) # пауза, например 5 сек.
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
class Window(QMainWindow):
def __init__(self):
super().__init__(self)
self.setWindowTitle("Title qq")
# self.setGeometry(400, 400, 400,400)
self.centralWidget = QWidget() # +++
self.setCentralWidget(self.centralWidget) # +++
self.runBtn = QtWidgets.QPushButton()
self.runBtn.setCheckable(True)
self.runBtn.setText("Y")
# self.runBtn.setGeometry(300,300,300,300)
self.runBtn.setObjectName("runBtn")
self.runBtn.clicked.connect(self.runProcess)
# self.runBtn.show()
layout = QHBoxLayout(self.centralWidget)
layout.addWidget(self.runBtn)
def runProcess(self):
self.thread = WorkThread()
self.thread.threadSignal.connect(self.on_threadSignal)
self.thread.start()
# time.sleep(1)
#? self.runBtn.setChecked(0)
def on_threadSignal(self, rez):
if rez:
print("hello") # how should this be done?
def appli():
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
appli()