【有书共读05】python编程--从入门到实践17
《python 编程》有一章是介绍如何调用api,其实就和调用库一样,而且调用api需要查看api文档,这一点根据需要自己学习。所以跳过这一章,写下一章。
编写一个用户登录界面
1、首先安装库easygui
直接在命令界面/终端:
pip install easygui
安装完成后就可以进行编码了
2、编码
import easygui as g
import sys
# 登录函数,用户名已注册为实现
def DengLu():
fields = ('用户名:', '密码:')
msg = '请输入用户名和密码:'
title = '登录'
yonghu = g.multpasswordbox(msg, title, fields)
if yonghu == None or yonghu == ['', '']:
g.msgbox('游客你好,欢迎来到我们的python学习园地!', ok_button='确定 ')
return 2
else:
# 将用户名读取在list1中
list1 = []
ZhangHao = open('zhanghao.txt')
for each_line in ZhangHao:
(zhanghao_, huiche_) = each_line.split('\n')
list1.append(zhanghao_)
ZhangHao.close()
# 将密码读取在list2中
list2 = []
MiMa = open('mima.txt')
for each_line in MiMa:
(mima_, huiche_) = each_line.split('\n')
list2.append(mima_)
MiMa.close()
# 确认用户名和密码是否存在并且匹配
for X in list1:
if X == str(yonghu[0]) and list2[list1.index(X)] != str(yonghu[1]):
g.msgbox('密码错误,请重新输入!', ok_button='确定 ')
return 0
break
elif X == str(yonghu[0]) and list2[list1.index(X)] == str(yonghu[1]):
g.msgbox(str(yonghu[0]) + '你好,欢迎来到我们的python学习园地!', ok_button='确定 ')
return 2
break
if str(yonghu[0]) not in list1:
g.msgbox('账号不存在,请注册:', ok_button='确定 ')
return 1
# 注册函数
def ZhuCe():
values = []
def zhuce():
msg = '*为必填项'
title = '账号中心'
fields = ['*用户名', '*密码', 'QQ']
return g.multenterbox(msg, title, fields, values)
YongHuZhuCe = zhuce()
if YongHuZhuCe == None:
g.msgbox('游客你好,欢迎来到我们的python学习园地!', ok_button='确定 ')
return 2
else:
while YongHuZhuCe[0] == '' or YongHuZhuCe[1] == '':
g.msgbox('用户名或密码不能为空!', ok_button='继续填写 ')
values = [YongHuZhuCe[0], YongHuZhuCe[1], YongHuZhuCe[2]]
YongHuZhuCe = zhuce()
# 检验用户名是否被占用
list3 = []
ZhangHao = open('zhanghao.txt')
for each_line in ZhangHao:
(zhanghao_, huiche_) = each_line.split('\n')
list3.append(zhanghao_)
ZhangHao.close()
while str(YongHuZhuCe[0]) in list3:
g.msgbox('该用户名已被占用!', ok_button='重新输入 ')
YongHuZhuCe = zhuce()
# 将账号密码分别存储在两个txt文件内
ZhangHao = open('zhanghao.txt', 'a')
ZhangHao.write(YongHuZhuCe[0] + '\n')
ZhangHao.close()
MiMa = open('mima.txt', 'a')
MiMa.write(YongHuZhuCe[1] + '\n')
MiMa.close()
return 0
def main():
# 创建两个txt临时文件,分别用于存放用户名和密码
ZhangHao = open('zhanghao.txt', 'w')
MiMa = open('mima.txt', 'w')
ZhangHao.close()
MiMa.close()
# 输入邀请码
password = '111111'
while password != '000000':
password = g.passwordbox('请输入邀请码(默认“000000”):', '即将开始easygui简单练习!')
if password == None:
sys.exit(0) # user chose to cancel,退出程序
while 1:
# 请选择登录或者注册
choices = ['已有账号,直接登录', '开始注册']
choice = 0
choice = g.indexbox('登录/注册:', '请选择:', choices=choices)
# 登录
while choice == 0:
choice = DengLu()
# 注册
while choice == 1:
choice = ZhuCe()
if choice == 0:
# 注册成功重新切入登录页面
g.msgbox('注册成功,即将进入登录页面!', ok_button='确定 ')
choice = DengLu()
if choice == 2:
g.msgbox('已完成登录或以游客身份进入,这部分可以随意发挥了', ok_button='确定 ')
msg = "是否要重新开始?"
title = "请选择"
if g.ccbox(msg, title, choices=('再来一次', '退出程序')):
pass # user chose to continue
else:
sys.exit(0) # user chose to cancel,退出程序
main()
①multpasswordbox(msg='Fill in values for the fields.', title=' ', fields=(), values=())
msg是显示在正文中的内容,title是窗口的标题,fields是输入框的提示内容(比如‘账号’,‘密码’之类的)。values是保存用户输入内容,如果省略,也可以通过函数返回值存储。
②msgbox(msg='(Your message goes here)', title=' ', ok_button='OK', image=None, root=None)
msgbox() 显示一个消息和提供一个"OK"按钮,你可以指定任意的消息和标题,你甚至可以重写"OK"按钮的内容。其实msgbox() 其实就是一个通知提醒窗口,超简单(有点像php中的alert
③multenterbox(msg='Fill in values for the fields.', title=' ', fields=(), values=())
multenterbox() 为用户提供多个简单的输入框,要注意以下几点:
如果用户输入的值比选项少的话,则返回列表中的值用空字符串填充用户为输入的选项。
如果用户输入的值比选项多的话,则返回的列表中的值将截断为选项的数量。
如果用户取消操作,则返回域中的列表的值或者None值
④ccbox(msg='Shall I continue?', title=' ', choices=('Continue', 'Cancel'), image=None)
ccbox() 提供一个选择:Continue 或者 Cancel,并相应的返回 1(选中Continue)或者 0(选中Cancel)。注意 ccbox() 是返回整型的 1 或 0,不是布尔类型的 True 或 False。