# -*- coding: utf-8 -*- import json import requests # Form implementation generated from reading ui file 'login.ui' # # Created by: PyQt5 UI code generator 5.15.4 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtCore import QThread, pyqtSignal # Qt中的线程 from PyQt5.QtWidgets import QWidget,QApplication from PyQt5.QtGui import QIcon import sys import time class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(472, 207) self.label = QtWidgets.QLabel(Form) self.label.setGeometry(QtCore.QRect(20, 40, 54, 12)) self.label.setObjectName("label") self.lineEdit = QtWidgets.QLineEdit(Form) self.lineEdit.setGeometry(QtCore.QRect(70, 40, 101, 20)) self.lineEdit.setObjectName("lineEdit") self.label_2 = QtWidgets.QLabel(Form) self.label_2.setGeometry(QtCore.QRect(20, 90, 54, 12)) self.label_2.setObjectName("label_2") self.lineEdit_2 = QtWidgets.QLineEdit(Form) self.lineEdit_2.setGeometry(QtCore.QRect(70, 80, 101, 20)) self.lineEdit_2.setObjectName("lineEdit_2") self.textBrowser = QtWidgets.QTextBrowser(Form) self.textBrowser.setGeometry(QtCore.QRect(200, 10, 256, 151)) self.textBrowser.setObjectName("textBrowser") self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(20, 130, 75, 23)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(Form) self.pushButton_2.setGeometry(QtCore.QRect(100, 130, 75, 23)) self.pushButton_2.setObjectName("pushButton_2") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.label.setText(_translate("Form", "用户名:")) self.label_2.setText(_translate("Form", "密码:")) self.pushButton.setText(_translate("Form", "登录")) self.pushButton_2.setText(_translate("Form", "忘记密码")) """子线程""" class login_thread(QThread): """子线程信号""" start_login_signal=pyqtSignal(str)#子线程接受一个字符串类型的参数 def __init__(self,signal): self.login_complete_signal=signal super().__init__() """子线程槽""" def login_by_requests(self,user_account_json):#槽接受一个str user_accout_dict=json.loads(user_account_json)#将主线程传来的json参数转回为字典格式 print(user_accout_dict.get("username"))#输出键为“username"的值 print(user_accout_dict.get("userpassword"))#输出键为“userpassword"的值 #使用requests模块发送请求(POST) '''将user_account_json中的账号密码作为参数发送到服务器,发送请求''' r=requests.post(url="https://service-odqwr32l-1326433294.sh.tencentapigw.com/release/pyqt_login",json=user_accout_dict) print("接受到的腾讯云服务器请求为",r.content.decode()) ret=r.json() print("这里发信号给UI线程") self.login_complete_signal.emit(json.dumps(ret)) def run(self): while True: print("子线程正在执行")#让子线程一直存在,从而有能力接受来自主线程的任务 time.sleep(1) class mywindow(QWidget): login_status_signal=pyqtSignal(str)#收到云服务器返回值的信号 def __init__(self): super().__init__() self.ui=Ui_Form()#调用UI_Form(),并且实例化一个新的对象 self.ui.setupUi(self)#将ui这个实例作为参数赋值给self,即将ui元素给self父对象 #调用UI_Form的文本框,并且实例化一个新的对象 self.text_browser=self.ui.textBrowser self.ui.pushButton.clicked.connect(self.login)#登录按钮连接一个槽 self.login_status_signal.connect(self.login_status) # 收到返回值的信号连接有返回值的槽 self.mythread=login_thread(self.login_status_signal)#实例化一个多线程对象 #给主线程添加一个子线程,当主线程在运行时子线程会直接运行。 self.mythread.start_login_signal.connect(self.mythread.login_by_requests)#子线程信号连接子线程槽 self.mythread.start() def login(self): self.username=self.ui.lineEdit.text()#输入框里输入的用户数据 self.password=self.ui.lineEdit_2.text()#输入框里输入的密码数据 """发送信号""" self.mythread.start_login_signal.emit(json.dumps({"username":self.username,"userpassword":self.password})) #将username,password转成字符串作为参数传给信号,这里将字典转为json格式 def login_status(self,status): print("status",status) status_dict=json.loads(status) self.text_browser.setText(status_dict.get("errmsg")) self.text_browser.repaint() if __name__ == '__main__': app=QApplication(sys.argv) w=mywindow() w.show() app.exec_()
用户登录pyqt,云函数
最新推荐文章于 2024-10-11 22:27:12 发布