0基础轻松入门python小程序 (python通过tkinter制作窗体程序)

Python程序开发之简单小程序实例

(10)登录注册窗体的实现

一、项目功能

利用Tkinter组件中的Canvas绘制用户登录窗体,实现用户登录判断和注册。

二、项目分析

要实现用户登录功能,需先导入Tkinter组件,然后用Canvas完成绘制。首先绘制一个登录窗体,然后在窗体中绘制标签、输入框和按钮控件。当用户输入用户名和登录密码时,需要对用户输入的数据进行判断,如果是未注册的用户名,就需要提示用户注册。

三、程序源代码

源码部分截图:

python简单入门开发小程序,0基础轻松入门python小程序

python简单入门开发小程序,0基础轻松入门python小程序

#!/usr/bin/python3.6

# -*- coding: GBK -*-

# 导入Tkinter

import tkinter as tk

import tkinter.messagebox

import pickle

# 实例化window窗口

window = tk.Tk()

# 窗口的可视化名

window.title('欢迎来到登录系统')

# 设定窗口的长和宽,长和宽中间的乘是小写字母x

window.geometry('400x250')

# 加载窗体图片

canvas = tk.Canvas(window, width=400, height=100, bg='white')

image_file = tk.PhotoImage(file='myblllog.gif')

image = canvas.create_image(200, 0, anchor='n', image=image_file)

canvas.pack(side='top')

# 显示用户名和密码的标签,标签的参数:父窗体,标签名,显示字体类型和大小,在父窗体中的位置

tk.Label(window, text='用户名:', font=('Arial', 14)).place(x=40, y=120)

tk.Label(window, text='密码:', font=('Arial', 14)).place(x=40, y=150)

# 用户名输入框

var_usr_name = tk.StringVar()

# 设置默认名称为 shenhaicyg@163.com

var_usr_name.set('shenhaicyg@163.com')

entry_usr_name = tk.Entry(window, textvariable=var_usr_name, font=('Arial', 14))

entry_usr_name.place(x=120,y=125)

# 用户密码输入框

var_usr_pwd = tk.StringVar()

entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, font=('Arial', 14), show='*')

entry_usr_pwd.place(x=120,y=155)

# 自定义用户登录函数

def usr_login():

# 获取用户输入的用户名和密码

usr_name = var_usr_name.get()

usr_pwd = var_usr_pwd.get()

# 异常捕获,因第一次使用,文件usrs_info.pickle是不存在的,所以要设置异常捕获

try:

with open('usrs_info.pickle', 'rb') as usr_file:# 程序将输入的信息和文件中的信息匹配。

usrs_info = pickle.load(usr_file)

except FileNotFoundError:#异常

# 程序第一次没有读取到`usr_file.pickle`的时候,会创建一个`usr_file.pickle`这个文件,并将管理员

# 的用户和密码写入,即用户名为`admin`密码为`admin`。

with open('usrs_info.pickle', 'wb') as usr_file:

usrs_info = {'admin': 'admin'}

pickle.dump(usrs_info, usr_file)

# 关闭文件

usr_file.close()

# 如果用户名和密码与文件中的匹配成功,则会在弹窗中提示登录成功。

if usr_name in usrs_info:

if usr_pwd == usrs_info[usr_name]:

tkinter.messagebox.showinfo(title='登录成功', message='亲爱的用户' + usr_name+',感谢您使用本系统!')

# 如果用户名匹配成功,而密码输入错误,则会弹出'您输入的密码错误,请再次尝试输入!'

else:

tkinter.messagebox.showerror(message='您输入的密码错误,请再次尝试输入!')

else: # 如果用户不存在,提示注册后再登录

is_sign_up = tkinter.messagebox.askyesno('您还没有注册,', '请先注册后再重新登录。 现在就去注册吗?')

# 提示需不需要注册新用户

if is_sign_up:

usr_sign_up()

# 自定义用户注册函数

def usr_sign_up():

def sign_to_sys():

# 获取注册信息:用户名,密码,重复密码

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:

tkinter.messagebox.showerror('输入错误!', '两次输入的密码必须一致!')

# 如果用户名已经注册过,则提示此用户已经注册!

elif nn in exist_usr_info:

tkinter.messagebox.showerror('输入错误!', '此用户名已经注册!')

# 注册信息核验成功,则将注册输入的信息写入文件,并提示注册成功,销毁窗口。

else:

exist_usr_info[nn] = np

with open('usrs_info.pickle', 'wb') as usr_file:

pickle.dump(exist_usr_info, usr_file)

tkinter.messagebox.showinfo('恭喜,', '您已成功注册为系统用户,感谢使用!')

# 销毁窗口

window_sign_up.destroy()

# 定义长在窗口上的窗口

window_sign_up = tk.Toplevel(window)

window_sign_up.geometry('300x200')

window_sign_up.title('用户注册')

new_name = tk.StringVar() # 将输入的注册名赋值给变量

new_name.set('shenhaicyg@.com') # 将最初显示定为'shenhaicyg@.com'

tk.Label(window_sign_up, text='设置用户名: ').place(x=10, y=10) # 将`User name:`放置在坐标(10,10)。

entry_new_name = tk.Entry(window_sign_up, textvariable=new_name) # 创建一个注册名的`entry`,变量为`new_name`

entry_new_name.place(x=130, y=10) # `entry`放置在坐标(130,10).

new_pwd = tk.StringVar()

tk.Label(window_sign_up, text='设置密码: ').place(x=10, y=50)

entry_usr_pwd = tk.Entry(window_sign_up, textvariable=new_pwd, show='*')

entry_usr_pwd.place(x=130, y=50)

new_pwd_confirm = tk.StringVar()

tk.Label(window_sign_up, text='再次输入密码: ').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=130, y=90)

# 下面的 sign_to_sys

btn_comfirm_sign_up = tk.Button(window_sign_up, text='立即注册', command=sign_to_sys)

btn_comfirm_sign_up.place(x=180, y=120)

# 登录和注册按钮

btn_login = tk.Button(window, text='立即登录', command=usr_login)

btn_login.place(x=120, y=200)

btn_sign_up = tk.Button(window, text='我要注册', command=usr_sign_up)

btn_sign_up.place(x=200, y=200)

# 窗口循环显示

window.mainloop()

四、代码解释

程序的第5至第7行为导入相应的模块。

第10行为实例化tkinter窗体window.

第13至37行为窗体各控件的布局及参数设置。

第40至69行为自定义用户登录函数。第49至56行为一个异常捕获模块,因为在系统第一次运行时,系统里没有用户登录文件,所以我们要在函数中内置了一个异常捕获try……except语句,用于捕获当用户名不存在时系统出现的异常,并利用except块语句自动创建一个默认的用户名和密码为admin的登录文件。第59至69行为用户登录的判断语句,用于判断用户输入的用户名和密码。

第72至121行为自定义用户注册函数,用于实现用户注册的相应功能。

第124至127行为实例化登录和注册按钮。

五、运行

1、在新窗体中绘制用户登录窗体,默认的登录名为shenhaicyg@163.com

python简单入门开发小程序,0基础轻松入门python小程序

2、当第一次运行系统时,会自动创建用户数据文件:

python简单入门开发小程序,0基础轻松入门python小程序

无用户数据文件:

当运行登录系统后,自动创建了一个名为usrs_info.pickle的数据文件:

python简单入门开发小程序,0基础轻松入门python小程序

3、如果系统未匹配到用户,会弹出提示框提示用户注册:

python简单入门开发小程序,0基础轻松入门python小程序

python简单入门开发小程序,0基础轻松入门python小程序

当点击“是”按钮后,弹出注册对话框:

python简单入门开发小程序,0基础轻松入门python小程序

注册成功:

python简单入门开发小程序,0基础轻松入门python小程序

注册成功后再次登录系统:

python简单入门开发小程序,0基础轻松入门python小程序

下一篇:《Python程序开发之简单小程序实例(11)》

更多精彩内容将在以后的章节分享给朋友们,请添加好友至收藏,欢迎点赞并关注后期内容更新!