import json import sys import time import requests from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import * from PyQt5 import uic,QtCore class LoginThread (QThread): # 创建自定义信号 Start_Login_Signal = pyqtSignal(str) def __init__(self, signal): super().__init__() self.Login_Complete_Signal = signal def Login_by_Requests(self, User_Password_Json): User_Data_Json = json.loads(User_Password_Json) print(User_Data_Json.get("User_ID")) print(User_Data_Json.get("User_Password")) # 使用Requests模块发送请求 POST r = requests.post(url="https://service-r80raze1-1300421481.sh.apigw.tencentcs.com/release/Python_Pyqt_Learn", json=User_Data_Json) print("接受服务器响应:", r.content.decode()) ret = r.json() print("发送信号给UI线程") self.Login_Complete_Signal.emit(json.dumps(ret)) def run(self): while True: print ("子线程 running...") time.sleep(1) class UserMainWindow(QWidget): Login_Status_Signal = pyqtSignal(str) def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.ui = uic.loadUi("./UserWindow.ui") # 提取要操作的控件 self.Get_Widget() # 绑定登录按钮至槽函数:User_Login self.BTN_Login.clicked.connect(self.User_Login) # 子线程登录成功后向主线程发送信号 self.Login_Status_Signal.connect(self.Login_Status) # 创建子线程 self.Login_Thread = LoginThread(self.Login_Status_Signal) # 将要创建的子线程类中的信号进行绑定 self.Login_Thread.Start_Login_Signal.connect(self.Login_Thread.Login_by_Requests) # 子线程开始工作 self.Login_Thread.start() def Get_Widget(self): # 用户信息输入框 # 用户ID self.UserInputID_Edit = self.ui.UserID_Edit # 用户密码 self.UserInputPwd_Edit = self.ui.UserPwd_Edit # 信息输出框 self.MessageOutput_Text = self.ui.Message_Text # 按钮:用户登录 self.BTN_Login = self.ui.BTN_Login def User_Login(self): # 获取用户输入文本 User_ID = self.UserInputID_Edit.text() User_Password = self.UserInputPwd_Edit.text() # 发送信号,子线程开始登录 self.Login_Thread.Start_Login_Signal.emit(json.dumps({"User_ID": User_ID, "User_Password": User_Password})) def Login_Status(self, status): Status_Dict = json.loads(status) print(Status_Dict.get("errmsg")) self.MessageOutput_Text.setText(Status_Dict.get("errmsg")) self.MessageOutput_Text.repaint() if __name__ == '__main__': QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) app = QApplication(sys.argv) w = UserMainWindow() # 展示窗口 w.ui.show() app.exec()