创建界面登录和注册

本文详细介绍了如何使用Python的Tkinter库创建一个简单的GUI应用,包括窗口设置、图像显示、输入框、按钮以及登录和注册功能的实现,涉及pickle模块进行用户信息存储和subprocess模块执行其他程序。
摘要由CSDN通过智能技术生成

import subprocess:导入subprocess模块,用于创建新的进程,可以用来运行其他程序。

import tkinter as tk:导入Tkinter模块,用于创建GUI,并将其重命名为tk

import pickle:导入pickle模块,用于将Python对象序列化和反序列化,这里用于存储和读取用户信息。

from tkinter import messagebox:从Tkinter模块中导入messagebox,用于显示消息框。

import subprocess
import tkinter as tk
import pickle
from tkinter import messagebox

这四行代码创建了一个新的Tkinter窗口,设置了窗口的标题为"Welcome",并设置了窗口的大小为450x300像素。

window=tk.Tk()
window.title('Welcome')
window.geometry('450x300')

这段代码在窗口中创建了一个画布(canvas),并在画布上显示了一个名为'welcome.gif'的图片。

image_file=tk.PhotoImage(file='welcome.gif')
image=canvas.create_image(0,0,anchor='nw',image=image_file)
canvas.pack(side='top')

这两行代码在窗口中创建并放置了两个标签,用于提示用户输入用户名和密码。

#user information
tk.Label(window,text='User name').place(x=50,y=150)
tk.Label(window,text='Password').place(x=50,y=190)

这段代码创建了一个名为var_usr_name的StringVar对象,用于存储用户名。然后创建了一个文本输入框(Entry),并将StringVar对象绑定到这个输入框。

var_usr_name=tk.StringVar()
var_usr_name.set('example@python.com')

entry_usr_name=tk.Entry(window,textvariable=var_usr_name)
entry_usr_name.place(x=160,y=150)

这段代码创建了一个名为var_usr_pwd的StringVar对象,用于存储密码。然后创建了一个文本输入框(Entry),并将StringVar对象绑定到这个输入框。这个输入框使用了show='*'参数,这意味着输入的文字将以星号(*)显示,以隐藏密码。

var_usr_pwd=tk.StringVar()
entry_usr_pwd=tk.Entry(window,textvariable=var_usr_pwd,show='*')
entry_usr_pwd.place(x=160,y=190)

这段代码创建了两个按钮,一个用于登录(usr_login),另一个用于注册(usr_sign_up)。这两个按钮都没有实现具体的函数逻辑,需要用户自己添加。

#login and sign up button

def usr_login():

    pass

def usr_sign_up():

    pass

btn_login=tk.Button(window,text='Login',command=usr_login)

btn_login.place(x=170,y=230)

btn_sign_up=tk.Button(window,text='Sign up',command=usr_sign_up)

btn_sign_up.place(x=270,y=230)

这段代码是usr_login函数的实现。它首先获取用户名和密码,然后尝试从文件usrs info.pickle中加载用户信息。如果文件不存在,则创建一个新的文件,并初始化用户信息为{'admin': 'admin'}。然后,它检查用户名是否在用户信息中,如果是,则检查密码是否正确。如果用户名和密码都正确,则弹出一个欢迎信息。如果密码错误,则弹出一个错误信息。如果用户名不在用户信息中,则弹出一个提示用户注册的对话框。

def usr_login():
    usr_name=var_usr_name.get()
    usr_pwd=var_usr_pwd.get()
    print(usr_name)
    try:
        with open('usrs_info.pickle','rb')as usr_file:
            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 your?'+ usr_name)
            window.destroy()


            subprocess.Popen(["python","demo01  zi.py"])


        else:
            tk.messagebox.showerror(message='Error,your password 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 = new_name.get()
        np = new_pwd.get()
        npf = new_pwd_confirm.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!')
            ##然后销毁窗口。
            window_sign_up.destroy()



    #注册窗口
    window_sign_up = tk.Toplevel(window)
    window_sign_up.geometry('350x200')
    window_sign_up.title('Sign up window')

    tk.Label(window_sign_up, text='User name: ').place(x=10, y= 10)#将`User name:`放置在坐标(10,10)。
    tk.Label(window_sign_up, text='Password: ').place(x=10, y=50)
    tk.Label(window_sign_up, text='Confirm password: ').place(x=10, y= 90)
    #用户名输入框
    new_name = tk.StringVar()#将输入的注册名赋值给变量
    new_name.set(var_usr_name.get())#将最初显示定为'example@python.com'
    entry_new_name = tk.Entry(window_sign_up, textvariable=new_name)#创建一个注册名的`entry`,变量为`new_name`
    entry_new_name.place(x=150, y=10)#`entry`放置在坐标(150,10).
    #密码输入框
    new_pwd = tk.StringVar()
    entry_usr_pwd = tk.Entry(window_sign_up, textvariable=new_pwd, show='*')
    entry_usr_pwd.place(x=150, y=50)
    #确认密码输入框
    new_pwd_confirm = tk.StringVar()
    entry_usr_pwd_confirm = tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*')
    entry_usr_pwd_confirm.place(x=150, y=90)
    #注册按钮
    btn_comfirm_sign_up = tk.Button(window_sign_up, text='Sign up', command=sign_up)
    btn_comfirm_sign_up.place(x=150, y=130)

#登录按钮
btn_login=tk.Button(window,text='Login',command=usr_login)
btn_login.place(x=170,y=230)
#注册按钮
btn_sign_up=tk.Button(window,text='Sign up',command=usr_sign_up)
btn_sign_up.place(x=270,y=230)

window.mainloop():启动Tkinter事件循环,让窗口等待用户操作。

window.mainloop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值