Python的GUI设计简单功能实践

根据要用的功能进行导包操作

from tkinter import ttk
import tkinter as tk
import tkinter.messagebox
import random
import json
import time
import os

好了,开始设计窗口属性与变化

window=tk.Tk()
#设置窗口属性
window.title("登陆验证")
window.iconbitmap("images\\title.ico")
window.geometry("500x400+500+200")canvas=tk.Canvas(window,width="400",height="150",bg="green")
#引入图片
images_file=tk.PhotoImage(file="images\\head.gif")
images = canvas.create_image(200, 0, anchor='n', image=images_file)
canvas.pack(side="top")
#欢迎介绍
tk.Label(window, text='WELCOME',font=('Arial', 16)).pack()
#登陆验证
tk.Label(window, text='Username:', font=('Arial', 14)).place(x=10, y=195)
tk.Label(window, text='Password:', font=('Arial', 14)).place(x=10, y=235)
#用户登陆输入框
# 用户名
entry_name = tk.Entry(window,width="30",font=('Arial', 12))
entry_name.place(x=120,y=195)
# 用户密码
entry_pwd = tk.Entry(window,width="30",font=('Arial', 12), show='*')
entry_pwd.place(x=120,y=235)# login and sign up 按钮
btn_login = tk.Button(window, text='Login', command=login)
btn_login.place(x=150, y=280)
btn_sign_up = tk.Button(window, text='Sign up', command=sign_up)
btn_sign_up.place(x=220, y=280#循环显示窗口
window.mainloop()

这大致的框架就这样做好了,现在考虑按钮的实现方法了,登录就对文件进行操作,这里的文件写入写出可以不用json用pickle,但是我要修改数据就用pickle了,我们可以在未注册直接登录的时候预先加入易得admin账号密码,还要加上各种判断。对于注册就要个弹窗直接获取写入就行了

def sign_up():def sign_to():#获取注册窗口的注册信息new_name=entry_new_name.get()new_pwd=entry_pwd.get()new_pwd_confirm=entry_pwd_confirm.get()with open('info', 'r') as fd1:usr_info = json.load(fd1)if new_pwd != new_pwd_confirm:tkinter.messagebox.showerror('Error', '密码不一致,请重新输入')# 如果用户名已经在我们的数据文件中,则提示Error, The user has already signed up!elif new_name in usr_info:tkinter.messagebox.showerror('Error', '该用户已经存在了')else:#没有谱之后可以写入文件usr_info[new_name] = [new_pwd,1000]with open('info', 'w') as fd1:json.dump(usr_info, fd1)tkinter.messagebox.showinfo('Welcome', '你已经注册成功了')# 然后销毁窗口。window_sign_up.destroy()# 定义长在窗口上的窗口window_sign_up = tk.Toplevel(window)window_sign_up.geometry('300x200+580+250')window_sign_up.title('注册')tk.Label(window_sign_up, text='Username: ').place(x=10, y=10)  # 将`User name:`放置在坐标(10,10)。entry_new_name = tk.Entry(window_sign_up)  entry_new_name.place(x=130, y=10)  # `entry`放置在坐标(130,10).tk.Label(window_sign_up, text='Password: ').place(x=10, y=50)entry_pwd = tk.Entry(window_sign_up,show='*')entry_pwd.place(x=130, y=50)tk.Label(window_sign_up, text='Confirm password: ').place(x=10, y=90)entry_pwd_confirm = tk.Entry(window_sign_up,show='*')entry_pwd_confirm.place(x=130, y=90)# 注册按钮btn_comfirm_sign_up = tk.Button(window_sign_up, text='Sign up', command=sign_to)btn_comfirm_sign_up.place(x=180, y=120)

现后可以进行登录,另外加两个游戏猜猜猜

#登陆注册的方法
def login():# 这两行代码就是获取用户输入的usr_name和usr_pwdusr_name = entry_name.get()usr_pwd = entry_pwd.get()try:with open('info', 'r') as f:usrs_info = json.load(f)except FileNotFoundError:# 这里就是我们在没有读取到``的时候,程序会创建一个``这个文件,并将管理员# 的用户和密码写入,即用户名为`admin`密码为`admin`。with open('info', 'w') as f:usrs_info = {"admin": ["admin",1000]}json.dump(usrs_info, f)f.close()  # 必须先关闭,否则json.load()会出现EOFError: Ran out of inputdef finger_guess():# 定义长在窗口上的窗口游戏window_sign_up_g1 = tk.Toplevel(window)window_sign_up_g1.geometry('350x200+580+250')window_sign_up_g1.title('猜拳')#定义随时变量usrs_info_change=1000tk.Label(window_sign_up_g1,text='输出信息', font=('Arial', 10)).place(x=120, y=5)g1_message_1 = tk.StringVar()g1_message_1.set('输入赌注,开始你的出招')g1_0 = tk.Entry(window_sign_up_g1,textvariable=g1_message_1,width=45)g1_0.place(x=20, y=30)tk.Label(window_sign_up_g1, text='赌注:', font=('Arial', 10)).place(x=20, y=90)g1_1 = tk.Entry(window_sign_up_g1,width="20")g1_1.place(x=50, y=90)def button_click(value,money):ls = ["石头", "剪刀", "布"]computer = random.choice(ls)try:stake= int(g1_1.get())if stake > money:tkinter.messagebox.showerror('Error', '你没有那么多钱!')returnif ls[value] == computer:g1_message_1.set("你和电脑出的都是{}".format(computer))elif ls[value] == "石头":if computer == "剪刀":money += stakeg1_message_1.set("你出的是石头,电脑出的剪刀,你赢了!金币:%s" % (money))else:money -= stakeg1_message_1.set("你出的是石头,电脑出的布,你输了!金币:%s" % (money))if money <= 0:g1_message_1.set("你已经输光了,充点钱再来吧")time.sleep(2)window_sign_up_g1.destroy()elif ls[value] == "剪刀":if computer == "石头":money -= stakeg1_message_1.set("你出的是剪刀,电脑出的石头,你输了!金币:%s" % (money))if money <= 0:g1_message_1.set("你已经输光了,充点钱再来吧")time.sleep(2)window_sign_up_g1.destroy()else:money += stakeg1_message_1.set("你出的是剪刀,电脑出的布,你赢了!金币:%s" % (money))elif ls[value] == "布":if computer == "石头":money += stakeg1_message_1.set("你出的是布,电脑出的石头,你赢了!金币:%s" % (money))else:money -= stakeg1_message_1.set("你出的是布,电脑出的剪刀,你输了!金币:%s" % (money))if money <= 0:g1_message_1.set("你已经输光了,充点钱再来吧")time.sleep(2)window_sign_up_g1.destroy()except:g1_message_1.set("未知的错误!")#进行一次保留一次with open("info.tap", mode="w", encoding="utf-8") as f2:usrs_info_change=moneyusrs_info[usr_name][1]=usrs_info_changejson.dump(usrs_info,f2)os.remove("info")os.rename("info.tap", "info"btn_1 = tk.Button(window_sign_up_g1,text="石头",command=lambda : button_click(value=0,money=usrs_info[usr_name][1]))btn_2 = tk.Button(window_sign_up_g1,text="剪子",command=lambda : button_click(value=1,money=usrs_info[usr_name][1]))btn_3 = tk.Button(window_sign_up_g1,text="布",command=lambda : button_click(value=2,money=usrs_info[usr_name][1]))btn_1.place(x=50,y=140)btn_2.place(x=150, y=140)btn_3.place(x=240, y=140)def digit_guess():# 定义长在窗口上的窗口游戏window_sign_up_g2 = tk.Toplevel(window)window_sign_up_g2.geometry('350x220+580+250')window_sign_up_g2.title('猜数字')# 定义随时变量usrs_info_change_d = 1000tk.Label(window_sign_up_g2, text='输出信息', font=('Arial', 10)).place(x=120, y=5)g2_message_2 = tk.StringVar()g2_message_2.set('输入赌注,开始你的出招')g2_0 = tk.Entry(window_sign_up_g2, textvariable=g2_message_2, width=45)g2_0.place(x=20, y=30)tk.Label(window_sign_up_g2, text='赌注:', font=('Arial', 10)).place(x=20, y=90)g2_2 = tk.Entry(window_sign_up_g2, width="20")g2_2.place(x=50, y=90)def button_click_d(value_d,money_d):computer_d=random.randint(1,10)try:stake_d = int(g2_2.get())if stake_d > money_d:tkinter.messagebox.showerror('Error', '你没有那么多钱!')returnif int(value_d)==computer_d:g2_message_2.set("哈哈,你真厉害,你猜对了,就是{},金币+{},还有{}".format(computer_d,stake_d*9,money_d))money_d+=(stake_d*9)else:g2_message_2.set("真可惜,你猜错了,真正的是{},金币-{},还有{}".format(computer_d,stake_d,money_d))money_d-=stake_dif money_d<=0:g2_message_2.set("你已经输光了,充点钱再来吧")time.sleep(2)window_sign_up_g2.destroy()except:g2_message_2.set("未知的错误!")#进行一次保留一次with open("info.tap", mode="w", encoding="utf-8") as f2_d:usrs_info_change_d=money_dusrs_info[usr_name][1]=usrs_info_change_djson.dump(usrs_info,f2_d)os.remove("info")os.rename("info.tap", "info")btn_1_d = tk.Button(window_sign_up_g2, text="1",command=lambda: button_click_d(value_d=0, money_d=usrs_info[usr_name][1]))btn_2_d = tk.Button(window_sign_up_g2, text="2",command=lambda: button_click_d(value_d=1, money_d=usrs_info[usr_name][1]))btn_3_d = tk.Button(window_sign_up_g2, text="3",command=lambda: button_click_d(value_d=2, money_d=usrs_info[usr_name][1]))btn_4_d = tk.Button(window_sign_up_g2, text="4",command=lambda: button_click_d(value_d=3, money_d=usrs_info[usr_name][1]))btn_5_d = tk.Button(window_sign_up_g2, text="5",command=lambda: button_click_d(value_d=4, money_d=usrs_info[usr_name][1]))btn_6_d = tk.Button(window_sign_up_g2, text="6",command=lambda: button_click_d(value_d=5, money_d=usrs_info[usr_name][1]))btn_7_d = tk.Button(window_sign_up_g2, text="7",command=lambda: button_click_d(value_d=6, money_d=usrs_info[usr_name][1]))btn_8_d = tk.Button(window_sign_up_g2, text="8",command=lambda: button_click_d(value_d=7, money_d=usrs_info[usr_name][1]))btn_9_d = tk.Button(window_sign_up_g2, text="9", command=lambda: button_click_d(value_d=8, money_d=usrs_info[usr_name][1]))btn_10_d = tk.Button(window_sign_up_g2, text="10",command=lambda: button_click_d(value_d=9, money_d=usrs_info[usr_name][1]))btn_1_d.place(x=30, y=140)btn_2_d.place(x=70, y=140)btn_3_d.place(x=110, y=140)btn_4_d.place(x=150, y=140)btn_5_d.place(x=190, y=140)btn_6_d.place(x=30, y=170)btn_7_d.place(x=70, y=170)btn_8_d.place(x=110, y=170)btn_9_d.place(x=150, y=170)btn_10_d.place(x=190, y=170)# 如果用户名和密码与文件中的匹配成功,则会登录成功。if usr_name in usrs_info:if usr_pwd == usrs_info[usr_name][0]:window_sign_up = tk.Toplevel(window)window_sign_up.geometry('500x400+500+200')window_sign_up.iconbitmap("images\\title.ico")window_sign_up.title('开始游戏')frame=ttk.Notebook(window_sign_up)f1=ttk.Frame(frame,height=200,width=200)tk.Label(f1, text='''简介内容,懒得写''').pack()f2=ttk.Frame(frame, height=200, width=200)tk.Label(f2, text='''简介内容,蓝底鞋''').pack()frame.add(f1,text="猜拳")frame.add(f2,text="猜数字")frame.pack()btn_guess_digit=tk.Button(window_sign_up,text="猜数字",command=digit_guess)btn_guess_finger=tk.Button(window_sign_up, text="猜拳", command=finger_guess)btn_guess_digit.place(x=250,y=300)btn_guess_finger.place(x=150,y=300)# 如果用户名匹配成功,而密码输入错误,则会弹出else:tkinter.messagebox.showerror('Error', '你的密码不正确请重新输入')else:  # 如果发现用户名不存在is_sign_up = tkinter.messagebox.askyesno('Welcome', '你还没有注册呢,是否注册')# 提示需不需要注册新用户if is_sign_up:sign_up()

完成,基本功能都实现了,文件里的字典值存的列表,有密码和分数,其实可以在优化,背景图和图标可以找别的图片进行代替
图标:.ico格式

对登录验证功能进行GUI设计相关推荐

  1. php静态登录界面代码,JSP_JSP登录验证功能的实现,静态的登录界面的设计login.htm - phpStudy...

    JSP登录验证功能的实现 静态的登录界面的设计login.htm,代码如下: 系统登录 系 统 登 录 用户名            密  码        将登录用户输入的信息提交到login.js ...

  2. shiro 实现登录验证功能

    实现登录验证功能 1.创建自己的Realm对象,继承AuthorizingRealm ​    实现父类的doGetAuthenticationInfo 认证方法 MyRealm.java packa ...

  3. JSP脚本实现登录验证功能

    JSP脚本实现登录验证功能 登录 点击退出 登录页面login <%@ page contentType="text/html;charset=UTF-8" language ...

  4. php post验证输入,$.post()登录验证功能

    $.post()登录验证功能 用户登录 邮箱 密码 登录 /** * $_post():jquery处理ajax中的post请求 * 基本语法:$.post(url, data, success, d ...

  5. 【博客项目】—登录验证功能实现( 五)

    [博客项目]-登录验证功能实现( 五)

  6. 实现企业邮箱登录验证功能

    需求说明 实现企业邮箱登录验证功能 用户通过JSP页面输入用户名和密码 如果用户名为lucky,密码为123456, 在欢迎页面显示"你好:lucky!" 如果验证登录失败,则返回 ...

  7. mysql查询使用qq邮箱注册_Spring Boot实现qq邮箱验证码注册和登录验证功能

    1.登录注册思路 这是一个使用spring boot做的一个qq邮箱注册和登录的项目. 没写前端页面,使用postman测试.有截图详细. 1.1.思路 注册:通过输入的邮箱发送验证码,检验前端传来的 ...

  8. html登录验证功能,续:实现用户登录验证功能

    一.提纲 1.Previously前情提要 已经把Thymeleaf部署到项目中: 把前端开发的静态资源成功引入到项目中: 完成登录验证功能,登录成功跳转到success.html页面,登录失败跳转到 ...

  9. Django实现小程序的登录验证功能,并维护登录态

    说明 这次自己做了一个小程序来玩,在登录方面一直有些模糊,网上看了很多文档后,得出以下一种解决方案. 环境说明: 1.小程序只需要拿到openid,其他信息不存储. 2.Django自带的User类不 ...

  10. Spring Security入门01-22 登录验证功能

    课程链接:SpringSecurity框架教程 开始时间:2022-07-17 快速入门 搭建一个Spring Boot项目 添加基础依赖和创建启动类和controller controller @R ...

最新文章

  1. 服务器技术综述(二)
  2. 开始使用-编写你的第一个Flutter应用程序
  3. Hibernate提供的内置标识符生成器
  4. 2016年华为校招上机考试试题答案
  5. 【决策单调性】玩具装箱(金牌导航 决策单调性优化DP-1)
  6. 视觉SLAM笔记(39) 求解 ICP
  7. c语言中printf输出格式
  8. 知识图谱java实现_知识图谱:neo4j(四)Java API
  9. SQL Server 与 Excel,Access 数据表的导入导出(注:参照博园.NET大观)
  10. 图形图像处理,CAD控件Simulation and Verification提供模拟机器的工具运转机床和车床材料的搬运控件...
  11. Nginx 0.7.x + PHP 5.2.6(FastCGI)搭建高性能web服务器
  12. Javascript版-显示相应图片的详细信息
  13. 论文Chinese Relation Extraction with Multi-Grained Information and External Linguistic Knowledge阅读笔记
  14. 人民币真的升值了吗?
  15. Sentaurus Process Device
  16. java8使用 Comparator.comparing 进行排序
  17. Ubuntu 16.04安装Matlab R2016b
  18. Scratch(五十一):端午节抛粽子
  19. ##如何通过写博客赚钱
  20. 详细介绍各种常见格式的图片

热门文章

  1. 2015年12月7号工作日志---------------------赵鑫
  2. html链接ppt,PPT超链接怎么做?
  3. centos7 firewalld ip转发设置
  4. 【实习】大三暑假实习总结:工作记录、个人日记、感悟总结
  5. 地铁与日本移动互联网
  6. 杭州治堵有“智慧” 阿里云数加激活城市大脑
  7. 经典软件典范龙卷风网络收音机功能详解
  8. 群晖NAS同步阿里云盘
  9. 运筹帷幄之中,决胜千里之外——运筹学1-3章
  10. 育英oj——LZY逃命路线总数