一、导包
import pickle:
pickle 是Python的一个标准库,它用于序列化和反序列化Python对象结构。序列化是将Python对象转换为一种可以传输或存储的格式(通常是二进制格式),而反序列化则是从这种格式恢复原始对象。
import tkinter as tk:
tkinter 是Python的标准GUI库。它允许你创建图形用户界面(GUI)应用程序。
as tk 是一个别名,这意味着你可以使用 tk 而不是 tkinter 来引用这个库,使代码更简洁。
from tkinter import PhotoImage:
这行代码从 tkinter 库中导入 PhotoImage 类。PhotoImage 类用于在 tkinter 应用程序中显示图片。
from tkinter import messagebox:
这行代码从 tkinter 库中导入 messagebox 模块。messagebox 提供了用于显示标准对话框(如警告框、信息框、错误框等)的函数。
import subprocess:
subprocess 模块允许你启动新的应用程序、连接到它们的输入/输出/错误管道,并获取它们的返回码。这个模块常用于执行外部命令和程序。
import pickle
import tkinter as tk
from tkinter import PhotoImage
from tkinter import messagebox
import subprocess
二、创建一个登录框
1.创建窗口,设置大小
yy=tk.Tk()
yy.title('计算')
yy.geometry('600x400')
2.加载并显示图片:
img = PhotoImage(file='D:\\PY\\五子棋\\welcome\\welcome.gif')
y5 = tk.Label(yy, image=img)
y5.pack()
这部分代码首先加载一个GIF图片文件,然后创建一个标签(Label
)来显示这个图片,并使用pack()
方法来组织标签在窗口中的位置。
3.创建用户名和密码的标签:
y1 = tk.Label(yy, text='User name', width=20, font=18)
y1.place(x=10, y=180)
y2 = tk.Label(yy, text='Password', width=20, font=18)
y2.place(x=8, y=250)
4.创建用户名和密码的输入框:
y11=tk.Entry(yy,width=20)
y11.place(x=250,y=180)
y22=tk.Entry(yy,width=20)
y22.place(x=250,y=250)
使用Entry
控件来创建两个输入框,分别用于输入用户名和密码。
5.创建按钮:
bu1=tk.Button(yy,text='Login',width=8,font=14)
bu1.place(x=210,y=310)
bu2=tk.Button(yy,text='Sign up',width=8,font=14)
bu2.place(x=380,y=310)
这里创建了两个按钮,一个用于登录,另一个用于注册。使用place()
方法指定它们在窗口中的位置
运行样子
三、创建一个注册框
1.创建窗口,设置大小
bb=tk.Tk()
bb.title('Sign up window')
bb.geometry('550x350')
2.创建用户名标签和输入框:
b1=tk.Label(bb,text='User name:',width=20,font=16)
b1.place(x=10,y=50)
b11=tk.Entry(bb,width=20)
b11.place(x=280,y=50)
创建了一个标签来显示“User name:”提示,并使用place()
方法将其放置在窗口的指定位置。然后,创建了一个输入框用于输入用户名,并将其放置在窗口的另一位置。
3.创建密码标签和输入框:
b2=tk.Label(bb,text='Password:',width=20,font=16)
b2.place(x=10,y=120)
b22=tk.Entry(bb,width=20)
b22.place(x=280,y=120)
与用户名部分类似,这里创建了一个标签来显示“Password:”提示和一个输入框用于输入密码。
4.创建确认密码标签和输入框:
b3=tk.Label(bb,text='Confirm password:',width=20,font=16)
b3.place(x=10,y=190)
b33=tk.Entry(bb,width=20)
b33.place(x=280,y=190)
这部分用于确认用户输入的密码,确保两次输入的密码一致。
5.创建按钮:
bu1=tk.Button(bb,text='Sign up',width=8,font=14)
bu1.place(x=200,y=250)
创建了一个“Sign up”按钮,并放置在窗口的适当位置。当用户点击这个按钮时,目前代码并没有定义任何行为,因为这部分逻辑还没有被实现。
运行样子
四、合并登录框注册框
import pickle
import tkinter as tk
from tkinter import PhotoImage
from tkinter import messagebox
import subprocess
def usr_login():
usr_name=y11.get()
usr_pwd=y22.get()
print(usr_name)
try:
with open('usrs_info.pickle','rb')as usr_file:
subprocess.Popen(["python", "D:\PY\五子棋\练习.py"])
print('1')
usrs_info=pickle.load(usr_file)
print(usrs_info)
except FileNotFoundError:
with open('usrs_info.pickle','wb')as usr_file:
print(2)
usrs_info={'admin':'admin'}
pickle.dump(usrs_info,usr_file)#序列化
print('OK')
print('usr_name:',usr_name)
if usr_name in usrs_info:
print(3)
if usr_pwd == usrs_info[usr_name]:
tk.messagebox.showinfo(title='Welcome',message='How are you?'+usr_name)
else:
tk.messagebox.showinfo(message='Error,your passward is wrong,try again.' )
else:
print(4)
is_sign_up=tk.messagebox.askyesno(title='Welcome',message='You have not sign up yet.Sign up today?')
if is_sign_up:
usr_sign_up()
def usr_sign_up():
print('开始注册')
def sign_up():
# 获取输入
nn = b11.get()
np = b22.get()
npf = b33.get()
# 读取后台数据
with open('usrs_info.pickle', 'rb') as usr_file:
exist_usr_info = pickle.load(usr_file)
# 判断两次输入的密码是否一致
if np != npf:
tk.messagebox.showerror('Error', 'Password and confirm password must be the same!')
#判断用户名是否已经注册
elif nn in exist_usr_info:
print('已经注册过了')
tk.messagebox.showerror('Error', 'The user has already signed up!')
# 注册成功,写入后台
else:
exist_usr_info[nn] = np
with open('usrs_info.pickle', 'wb') as usr_file:
pickle.dump(exist_usr_info, usr_file)
tk.messagebox.showinfo('Welcome', 'You have successfully signed up!')
##然后销毁窗口。
bb.destroy()
bb = tk.Tk()
bb.title('Sign up window')
bb.geometry('550x350')
b1 = tk.Label(bb, text='User name:', width=20, font=16)
b1.place(x=10, y=50)
b11 = tk.Entry(bb, width=20)
b11.place(x=280, y=50)
b2 = tk.Label(bb, text='Password:', width=20, font=16)
b2.place(x=10, y=120)
b22 = tk.Entry(bb, width=20)
b22.place(x=280, y=120)
b3 = tk.Label(bb, text='Confirm password:', width=20, font=16)
b3.place(x=10, y=190)
b33 = tk.Entry(bb, width=20)
b33.place(x=280, y=190)
bu3 = tk.Button(bb, text='Sign up', width=8, font=14,command=sign_up)
bu3.place(x=200, y=250)
yy=tk.Tk()
yy.title('计算')
yy.geometry('600x400')
img=PhotoImage(file='D:\PY\五子棋\welcome\welcome.gif')
y5=tk.Label(yy,image=img)
y5.pack()
y1=tk.Label(yy,text='User name',width=20,font=18)
y1.place(x=10,y=180)
y2=tk.Label(yy,text='Password',width=20,font=18)
y2.place(x=8,y=250)
y11=tk.Entry(yy,width=20)
y11.place(x=250,y=180)
y22=tk.Entry(yy,width=20)
y22.place(x=250,y=250)
bu1=tk.Button(yy,text='Login',width=8,font=14,command=usr_login)
bu1.place(x=210,y=310)
bu2=tk.Button(yy,text='Sign up',width=8,font=14,command=usr_sign_up)
bu2.place(x=380,y=310)
yy.mainloop()
五、和游戏合并
subprocess.Popen(["python", "D:\PY\五子棋\练习.py"])
游戏的代码在我之前发的博客里有