https://blog.csdn.net/huayunhualuo/article/details/102726556
多窗口
https://blog.csdn.net/weixin_42147967 – 还没看
多线程
# 使用多线程
import sys
import time
from PyQt5.QtCore import pyqtSignal,Qt
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtWidgets import QPushButton,QLabel,QLineEdit
from PyQt5.uic import loadUi
from PyQt5.QtCore import QThread
import demo2
class MyThread(QThread):
def __init__(self):
super(MyThread, self).__init__()
# 调用start 会自动调用 run 方法
def run(self):
for i in range(10):
print("threading...")
time.sleep(1)
class MyWindow(QWidget,demo2.Ui_Form):
# # pyqt的自定义信号 必须为类属性,不能放在其他方法中
# my_signal = pyqtSignal(str)
def __init__(self):
super(MyWindow, self).__init__()
# self.ui=loadUi('./demo1.ui')
self.setupUi(self)
self.ui_init()
def ui_init(self):
# self.ui.pushButton_2.clicked.connect(self.log_in)
# self.pushButton_2.clicked.connect(self.log_in)
self.pushButton.clicked.connect(self.click1)
self.pushButton_2.clicked.connect(self.click2)
def log_in(self):
# print(f'{self.lineEdit.text()}')
# print(f'{self.lineEdit_2.text()}')
# self.textBrowser.setText("用户登录中...")
# self.textBrowser.setText(self.lineEdit.text())
# self.textBrowser.setText(self.lineEdit_2.text())
pass
def click1(self):
for i in range(10):
print("阻塞...")
time.sleep(1)
def click2(self):
self.my_thread=MyThread()
self.my_thread.start()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWindow()
w.show()
# 主线程持续更新,Qthread线程执行别的操作
app.exec_()
进阶1
import json
import sys
import time
from PyQt5.QtCore import pyqtSignal,Qt
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtWidgets import QPushButton,QLabel,QLineEdit
from PyQt5.uic import loadUi
from PyQt5.QtCore import QThread
import demo1
class LoginThread(QThread):
start_login_signal=pyqtSignal(str)
def __init__(self):
super(LoginThread, self).__init__()
def login(self,user_password_json):
user_password=json.loads(user_password_json)
print(f"user name{user_password.get('user_name')}")
print(f"user name{user_password.get('password')}")
def run(self) -> None:
while True:
print("child thread...")
time.sleep(1)
class MyWindow(QWidget,demo1.Ui_Form):
# # pyqt的自定义信号 必须为类属性,不能放在其他方法中
# my_signal = pyqtSignal(str)
def __init__(self):
super(MyWindow, self).__init__()
# self.ui=loadUi('./demo1.ui')
self.setupUi(self)
self.ui_init()
def ui_init(self):
# self.ui.pushButton_2.clicked.connect(self.log_in)
self.pushButton_2.clicked.connect(self.log_in)
self.login_thread=LoginThread()
self.login_thread.start_login_signal.connect(self.login_thread.login)
self.login_thread.start()
def log_in(self):
print(f'{self.lineEdit.text()}')
print(f'{self.lineEdit_2.text()}')
self.textBrowser.setText("用户登录中...")
self.textBrowser.setText(self.lineEdit.text())
self.textBrowser.setText(self.lineEdit_2.text())
self.login_thread.start_login_signal.emit(json.dumps({"user_name":self.lineEdit.text(),
"password":self.lineEdit_2.text()}))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWindow()
w.show()
app.exec_()