Изменить окно PyQt по запросу информации из API
Есть приложение на PyQt стандартный пример.
class Login(QtWidgets.QWidget, Ui_Form):
switch_window = QtCore.pyqtSignal()
def __init__(self):
QtWidgets.QWidget.__init__(self)
self.setupUi(self)
self.pushButton.clicked.connect(self.pushbutton_handler)
def pushbutton_handler(self):
self.switch_window.emit()
class MainWindow(QtWidgets.QWidget, Ui_Form1):
switch_window = QtCore.pyqtSignal()
def __init__(self):
QtWidgets.QWidget.__init__(self)
self.setupUi(self)
self.pushButton.clicked.connect(self.pushbutton_handler)
def pushbutton_handler(self):
self.switch_window.emit()
class Controller:
def __init__(self):
pass
def show_login(self):
self.login = Login()
self.login.switch_window.connect(self.show_main)
self.login.show()
def show_main(self):
self.window = MainWindow()
self.window.switch_window.connect(self.show_login)
self.login.close()
self.window.show()
def main(dr):
app = QtWidgets.QApplication(sys.argv)
controller = Controller()
controller.show_login()
controller.show_login()
sys.exit(app.exec_())
Есть апи, которое слушает порт и возвращает 1 или 0,
как заставить PyQt изменить окно если апи вернуло 1 или 0.
Помогите пожалуйста
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Просто запустите мой пример и понаблюдайте секунд 10, посмотрите что происходит.
import sys
import random
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
class WorkThread(QThread):
threadSignal = pyqtSignal(int)
def __init__(self, startParm):
super().__init__()
self.startParm = startParm
def run(self):
while True:
# тут вы слушает порт и возвращает 1 или 0
self.msleep(2000)
date = random.randrange(0, 2)
self.threadSignal.emit(date)
print(f'date = {date}')
class Login(QtWidgets.QWidget): # ???, Ui_Form):
switch_window = QtCore.pyqtSignal()
def __init__(self):
QtWidgets.QWidget.__init__(self)
# ??? self.setupUi(self)
self.setWindowTitle('Login')
self.resize(300, 300)
self.pushButton = QPushButton('Go show_main')
self.pushButton.clicked.connect(self.pushbutton_handler)
layout = QVBoxLayout(self)
layout.addWidget(self.pushButton)
def pushbutton_handler(self):
self.switch_window.emit()
class MainWindow(QtWidgets.QWidget): # ???, Ui_Form1):
switch_window = QtCore.pyqtSignal()
def __init__(self):
QtWidgets.QWidget.__init__(self)
# ??? self.setupUi(self)
self.setWindowTitle('MainWindow')
self.resize(400, 200)
self.pushButton = QPushButton('Go show_login')
self.pushButton.clicked.connect(self.pushbutton_handler)
layout = QVBoxLayout(self)
layout.addWidget(self.pushButton)
def pushbutton_handler(self):
self.switch_window.emit()
class Controller:
def __init__(self):
pass
self.login = Login() # +++
self.login.switch_window.connect(self.show_main) # +++
self.window = MainWindow() # +++
self.window.switch_window.connect(self.show_login) # +++
startParm = 0
self.thread = WorkThread(startParm)
self.thread.threadSignal.connect(self.on_threadSignal)
self.thread.start()
def on_threadSignal(self, date):
if date == 0:
self.show_login()
elif date == 1:
self.show_main()
def show_login(self):
# self.login = Login()
# self.login.switch_window.connect(self.show_main)
self.login.show()
self.window.hide() # +++
def show_main(self):
# self.window = MainWindow()
# self.window.switch_window.connect(self.show_login)
# self.login.close()
self.window.show()
self.login.hide() # +++
def main(dr):
app = QtWidgets.QApplication(sys.argv)
controller = Controller()
controller.show_login()
# ??? controller.show_login()
sys.exit(app.exec_())
if __name__ == '__main__':
main('dr')
