Не отвечает программа

При запуске зависает и ничего не происходит.
Ошибки тоже нет.
Всё произошло после добавления новой библеотеки 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()
→ Ссылка