2019-05-27--tkinter练习-11-综合实例-登录窗口


'''
1,画布功能有个细节,实战出真知。
一个jpg格式的图片,我直接更改名字成gif,然后复制路径到下面这里,系统提示我识别不出来。
image_file = tk.PhotoImage(file='C:\\Users\Administrator\PycharmProjects\百度贴吧爬虫\\123.gif')
但是,我下载了一个纯粹的gif格式的图片,放入进入就能够识别出来,很有意思!

2,pickle模块,我非常陌生,不知道细节,就知道大概可以存储一些数据。
莫烦的pickle教程地址:https://morvanzhou.github.io/tutorials/python-basic/basic/13-08-pickle/
教程非常简化精炼,我感觉很不错!

3,设置尺寸出了问题。300x200
#这里应该写200×100,应该写成200x100,x是小写字母x不是乘号
window.geometry('200×100')

'''
import tkinter as tk
import pickle
import tkinter.messagebox

# 设置窗口---最开始的母体窗口
window = tk.Tk()  # 建立一个窗口
window.title('欢迎来到登录窗口')
window.geometry('500x500')  # 窗口大小为300x200

#加载图片代码---图片一定要gif格式的,自己改成gif的不算数。路径这快要加转义字符。其余的都比较简单。
canvas = tk.Canvas(window,height=200,width=900)
image_file = tk.PhotoImage(file='C:\\Users\Administrator\PycharmProjects\百度贴吧爬虫\\123.gif')
image = canvas.create_image(0,0,anchor='nw',image=image_file)
canvas.pack(side='top')

#两个文字标签,用户名和密码两个部分。
tk.Label(window,text='User name:').place(x=50,y=150)
tk.Label(window,text='Password:').place(x=50,y=190)

#
var_usr_name=tk.StringVar()  #讲文本框的内容,定义为字符串类型。
var_usr_name.set('[email protected]') #这是设置成默认值。
var_usr_pwd = tk.StringVar()

#第一个输入框-用来输入用户名的。
entry_usr_name=tk.Entry(window,textvariable=var_usr_name) #textvariable 获取文本框的内容
entry_usr_name.place(x=160,y=150)
#第二个输入框-用来输入密码的。
entry_usr_pwd=tk.Entry(window,textvariable=var_usr_pwd,show='*')
entry_usr_pwd.place(x=160,y=190)

def usr_login():
    usr_name = var_usr_name.get()
    usr_pwd = var_usr_pwd.get()
    try:
        with open('usrs_info.pickle','rb') as usr_file:
            usrs_info = pickle.load(usr_file)
    except FileNotFoundError:
        with open('usrs_info.pickle','wb') as usr_file:
            usrs_info={'admin':'admin'}
            pickle.dump(usrs_info,usr_file)

    if usr_name in usrs_info:
        if usr_pwd == usrs_info[usr_name]:
            tk.messagebox.showinfo(title='欢迎你',message='你还好吗?'+ usr_name)
        else:
            tk.messagebox.showinfo(message='Error,你的密码不对啊,请重试')
    else:
        is_sign_up=tk.messagebox.askyesno('欢迎','你还没有注册啊,今天就注册吧')
        print(is_sign_up)
        if is_sign_up:
            usr_sign_up()


#注册按钮
def usr_sign_up():
    def sign_to_Mofan_Python():
        np= new_pwd.get()
        npf = new_pwd_confirm.get()
        nn = new_name.get()
        #上面是获取数据,下面是查看一下是否重复注册过。
        with open('usrs_info.pickle','rb') as usr_file:
            exist_usr_info=pickle.load(usr_file)
            if np!=npf:
                tk.messagebox.showerror('Error','密码和确认密码必须一样')
            elif nn in exist_usr_info:
                tk.messagebox.showerror('Error','用户名早就注册了!')
            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('欢迎','你已经成功注册了')
                window_sign_up.destroy()


    #点击注册之后,会弹出这个窗口界面。
    window_sign_up = tk.Toplevel(window)
    window_sign_up.title('Sign up window')
    window_sign_up.geometry('550x500') #里面竟然是x,而不是*号

    #用户名框--这里输入用户名框。
    new_name = tk.StringVar()
    new_name.set('[email protected]') #设置的是默认值
    tk.Label(window_sign_up,text = 'User name').place(x=10,y=10)
    entry_new_name = tk.Entry(window_sign_up,textvariable = new_name)
    entry_new_name.place(x=150,y=10)

    #新密码框--这里输入注册时候的密码
    new_pwd = tk.StringVar()
    tk.Label(window_sign_up,text='Password').place(x=10,y=50)
    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()
    tk.Label(window_sign_up,text='Confirm password:').place(x=10,y=90)
    entry_usr_pwd_confirm=tk.Entry(window_sign_up,textvariable=new_pwd_confirm,show='*')
    entry_usr_pwd_confirm.place(x=150,y=90)

    btn_confirm_sign_up = tk.Button(window_sign_up,text = 'Sign up',command=sign_to_Mofan_Python)
    btn_confirm_sign_up.place(x=150,y=130)

#创建注册和登录按钮
btn_login=tk.Button(window,text='Login',command=usr_login)
btn_login.place(x=170,y=230) #用place来处理按钮的位置信息。
btn_sign_up= tk.Button(window,text='Sign up',command=usr_sign_up)
btn_sign_up.place(x=270,y=230)



window.mainloop()

你可能感兴趣的:(2019-05-27--tkinter练习-11-综合实例-登录窗口)