【python笔记】Qt+云函数 实现简单的登录框制作
【python笔记】Qt+云函数 实现简单的登录框制作
备注:前置条件:QtDesigner、pycharm、PyQt5、配置好的云函数(百度的叫函数计算CFC,用来充当一个简陋的服务器,主要是免费)
大致思路:
点击登录框的时候,把username和password框的的数据打包成json发送到云函数提供的url里(云函数html触发)
在云函数里判断用户名和密码,当判断正确,则返回1,判断假则返回0
在本地判断返回值,返回值为1则在textbrowser里出现文字“登录成功”,否则出现文字“登录失败”
需要处理的问题:
- 登录框和密码框点击的时候用多线程处理,否则点击以后,整个界面都会卡住,要等事件完全结束以后才能操作页面。
解决方式:点击登录框的时候创建一个子线程,在子线程里跑按钮的槽函数
- 由于是子线程跑登录按钮事件的槽函数,发送数据包到url,接收url的返回值,都在子线程,而textbrowser是在主线程,所以涉及到进程间通信
解决方式:要用一个自定义信号来emit的时候把返回值返回到主线程
1.用QtDesigner随便画一个登录框

2.配置云函数
这个函数用来模拟服务器登录
- 百度智能云 -> 产品 -> 云原生 -> 函数计算
- 创建函数,选择空白函数,事件模式选择event,运行时选择python3.6,触发器选择HTTP触发,HTTP方法选择全部或者POST都行,直接创建函数即可。
- 修改云函数
#用request发送一个json数据包到云函数提供的url,json数据会储存在event参数里,这里把用户名、密码写死了,#其实是可以连接数据库的,在数据库里查询
import json
def handler(event, context):
username = json.loads(event.get("body")).get("username")
password = json.loads(event.get("body")).get("password")
if(username == "admin")&(password == "wdnmd"):
ret = 1
else:
ret = 0
return ret
- python代码
import sys
import time
import json
import requests
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import *
from PyQt5 import uic
class login_thread(QThread):
start_login_signal = pyqtSignal(str) #用来把url返回的值从子线程提交到主线程
def __init__(self,signal):
super().__init__()
self.signal1 = signal
def login_request(self,json_data):
num="0"
json_data1 = json.loads(json_data)
resp = requests.post(url="https://2729mj3a1p6k3.cfc-execute.bj.baidubce.com/loginfunc",json=json_data1)
resp.close()
num = resp.text
self.signal1.emit(num) #激活自定义型号,传参,参数为登录返回值
def run(self): #继承QThread,重写run函数,写个死循环防止线程死亡
while(1):
time.sleep(1)
class my_window(QWidget):
login_status=pyqtSignal(str)
def __init__(self):
super().__init__()
self.init()
def init(self):
self.ui = uic.loadUi("login.ui")#加载写好的界面
#把每个ui文件里的按钮绑定起来
self.account_edit = self.ui.lineEdit
self.password_edit = self.ui.lineEdit_2
self.login_button = self.ui.pushButton
self.register_button = self.ui.pushButton_2
self.textb = self.ui.textBrowser
self.login_button.clicked.connect(self.login)
self.login_status.connect(self.status) #绑定槽函数
self.thread = login_thread(self.login_status)
self.thread.start_login_signal.connect(self.thread.login_request) #绑定槽函数
self.thread.start()
def login(self):
username = self.account_edit.text()
password = self.password_edit.text()
self.thread.start_login_signal.emit(json.dumps({"username":username,"password":password}))
def status(self,status): #通过返回值判断登录状态,设置textbrowser里的文字
if status=='1':
self.textb.setText("登录成功")
self.textb.repaint() #每次更新文字要重绘一下,不然会不显示
else:
self.textb.setText("登录失败")
self.textb.repaint()
app = QApplication(sys.argv)
w = my_window()
w.ui.show()
app.exec()
【python笔记】Qt+云函数 实现简单的登录框制作的更多相关文章
- python笔记:#012#函数
函数基础 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体验 1.1 快速体验 所谓函数,就是把 具有独立功能的代码块 组织为一个 ...
- Python笔记·第九章—— 函数 (一)
一.函数的作用 函数可以让我们代码结构更清晰,而且避免了代码的重复,冗余,使一段代码或者功能可以反复的被调用,大大提高了开发效率 二.函数的定义 def 函数名(参数1,参数2,*args,默认参数, ...
- Python笔记-高阶函数
1.函数式编程 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量. 函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! 传入函数 既然 ...
- python笔记21-内置函数
# print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真# print(any([0,0,0,0,0]))#判断可迭代的对象里面的值是否有一个为真# print(bin(10 ...
- guxh的python笔记二:函数基础
1,函数的参数 1.1,查看函数的参数类型 def run(a, *args, b, **kwargs): return a + b 可以通过如下方式查看参数类型: import inspect k ...
- python笔记之强制函数以关键字参数传参
最近学习python,学到了函数传参,看到了以下这个特殊情况,特此来做个笔记 def add(*, x, y): print(x, y) 以上函数定义后,该怎么传参?前面的那个*号是做什么用的? 我们 ...
- python笔记-调用eval函数出现invalid syntax错误
本来是想打算使用eval函数对变量进行赋值的,没想到出现了invalid syntax错误.源代码如下 In [2]: eval('a = 1') File "<string>& ...
- python笔记六(函数的参数、返回值)
一 调用函数 在写函数之前,我们先尝试调用现有的函数 >>> abs(-9) 9 除此之外,还有我们之前使用的len()等.可以用于数据类型转换的 int() float() str ...
- python笔记-正则表达式常用函数
1.re.findall()函数 语法:re.findall(pattern,string,flags=0) --> list(列表) 列出字符串中模式的所有匹配项,并作为一个列表返回.如果无匹 ...
随机推荐
- 用python爬虫,对12306网站进行模拟登陆
from selenium import webdriver from time import sleep from PIL import Image from selenium.webdriver ...
- 大一/初学者学C语言前必看!!!(建议收藏)
目录 数据类型 常量.变量 数组 字符串.转义字符 选择语句 循环语句 函数 操作符 结构体 指针 神秘的学习资料基地jq.qq.com/?_wv=1027&k=5kWJsY1z 一.数据类 ...
- XCTF练习题---CRYPTO---Morse解析
XCTF练习题---CRYPTO---Morse解析 flag:morsecodeissointeresting 解题步骤: 1.观察题目,下载附件进行查看 2.得到文件内容,由0.1组成,初步判断为 ...
- stm32F103C8T6通过写寄存器点亮LED灯
因为我写寄存器的操作不太熟练,所以最近腾出时间学习了一下怎么写寄存器,现在把我的经验贴出来,如有不足请指正 我使用的板子是stm32F103C8T6(也就是最常用的板子),现在要通过写GPIO的寄存器 ...
- ChCore Lab2 内存管理 实验笔记
本文为上海交大 ipads 研究所陈海波老师等人所著的<现代操作系统:原理与实现>的课程实验(LAB)的学习笔记的第二篇.所有章节的笔记可在此处查看:chcore | 康宇PL's Blo ...
- 老生常谈系列之Aop--Spring Aop源码解析(一)
老生常谈系列之Aop--Spring Aop源码解析(一) 前言 上一篇文章老生常谈系列之Aop--Spring Aop原理浅析大概阐述了动态代理的相关知识,并且最后的图给了一个Spring Aop实 ...
- Flutter和iOS混编详解
前言 下面的内容是最近在使用Flutter和我们自己项目进行混编时候的一些总结以及自己踩的一些坑,处理完了就顺便把整个过程以及一些我们可能需要注意的点全都梳理出来,希望对有需要的小伙伴有点帮助,也方便 ...
- 【mq】从零开始实现 mq-10-消费者拉取消息回执 pull message ack
前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...
- scanf需要多输入一行是什么问题
有大佬知道用scanf输入,执行程序要多输入一行才能运行一般是什么问题呢 scanf的问题,其中多了\n. scanf如果加入\n,会导致需要多输入一次数据. 错误实例:
- final变量、方法与类
学习内容: 一.final变量 1.设定为final的变量,其值不可被改变. 2.final定义的变量必须在声明时对其进行赋值操作. 3.final可以修饰对象.被修饰为final的对象,只能恒定指向 ...