游戏登陆界面

本文介绍了如何使用Python的tkinter库创建登录和注册界面,包括图片显示、输入框、按钮和文件操作。同时展示了如何通过subprocess模块调用外部游戏脚本,实现登录后启动游戏的功能。
摘要由CSDN通过智能技术生成

一、导包

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"])

游戏的代码在我之前发的博客里有

1.它导入了 subprocess 模块

2.它使用 Popen 函数来启动一个新的进程。

3.在这个新进程中,它尝试运行 python 命令(这通常是 Python 解释器的命令)。

4.它传递了 "D:\\PY\\五子棋\\练习.py" 作为参数给 python 命令,这告诉 Python 解释器去执行 D:\PY\五子棋\练习.py 这个脚本文件。

注意,由于反斜杠 \ 在 Python 字符串中是一个转义字符,所以你需要使用双反斜杠 \\ 来表示单个反斜杠。另外,如果你的脚本文件的路径中包含了空格或者特殊字符,你可能需要把整个路径用引号包起来。

  • 25
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值