用户登录pyqt,云函数

# -*- 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_()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值