应粉丝要求上源码
# -*- coding=utf-8 -*-
# @Time : 2022/3/29 17:00
# @Author :zgz
# @File : login.py
# @Software : PyCharm
from tkinter import *
from tkinter import messagebox
from PIL import ImageTk
from PIL import Image
import pickle
def main():
global root
root = Tk()
x = int(root.winfo_screenwidth() / 2 - root.winfo_reqwidth() / 2)
y = int(root.winfo_screenheight() / 2 - root.winfo_reqheight() / 2)
root.geometry(f'400x300+{x - 100}+{y - 70}')
root.title('交易系统登录')
# root.iconbitmap('logo.ico')
root.resizable(False, False) # 不允许改变窗口大小
fr1 = Frame(root)
fr1.pack()
img1 = get_img(filename='zf01.jpg', width=400, height=150) # 自己找一张图片
canvas = Canvas(fr1, width=400, height=150, bg='lightblue', highlightthickness=0)
canvas.create_image(200, 0, image=img1, anchor='n')
canvas.create_text(200, 48, text="欢迎使用股票自动交易系统", fill='red', font=('方正粗黑宋简体', 13))
canvas.pack()
fr2 = Frame(root)
fr2.pack(pady=10)
# 用户名
Lab_1 = Label(fr2, text='用 户 名:', font=('Arial', 10))
Lab_1.grid(row=0, column=0, padx=(0, 0), pady=10) # 0行0列
var_usr_name = StringVar()
entry_usr_name = Entry(fr2, textvariable=var_usr_name, font=('Arial', 10))
entry_usr_name.grid(row=0, column=1, padx=(20, 0), pady=8) # 0行1列
entry_usr_name.focus_set() # 获得焦点
# 用户密码
Lab_2 = Label(fr2, text='登录密码:', font=('Arial', 10))
Lab_2.grid(row=1, column=0, padx=(0, 0), pady=8) # 1行0列
var_usr_pwd = StringVar()
entry_usr_pwd = Entry(fr2, textvariable=var_usr_pwd, font=('Arial', 10), show='*')
entry_usr_pwd.grid(row=1, column=1, padx=(20, 0), pady=8) # 1行1列
# 定义用户登录功能
def usr_login():
usr_name = var_usr_name.get()
usr_pwd = var_usr_pwd.get()
if usr_name == '' or usr_pwd == '':
messagebox.showerror('Error', '用户名,密码不能空!
请 重 新 输 入!')
return
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)
usr_file.close() # 必须先关闭
if usr_name in usrs_info:
if usr_pwd == usrs_info[usr_name]:
fr1.destroy()
fr2.destroy()
Home(master=root) # 主窗体模块的界面加载
else:
messagebox.showerror("错误", "密 码 错 误!
请重新输入")
else: # 如果发现用户名不存在
is_sign_up = messagebox.askyesno('欢迎光临! ', '您还没有注册. 马上注册?')
# 提示需不需要注册新用户
if is_sign_up:
usr_sign_up()
# 定义用户注册功能
def usr_sign_up():
infodisplay()
def sign_to():
np = new_pwd.get()
npf = new_pwd_confirm.get()
nn = new_name.get()
if np == '' or nn == '':
messagebox.showerror('Error', '用户名,密码不能空!
请 重 新 输 入 !')
return
# 这里是打开我们记录数据的文件,将注册信息读出
try:
with open('usrs_info.pickle', 'rb') as usr_file:
exist_usr_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)
exist_usr_info = 'admin'
usr_file.close()
if np != npf:
messagebox.showerror('Error', '两次密码必须相同!')
elif nn in exist_usr_info:
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)
messagebox.showinfo('Welcome', '您已注册成功!')
# window_sign_up.destroy()
close_handler()
global window_sign_up
window_sign_up = Toplevel()
window_sign_up.transient(root)
window_sign_up.attributes('-topmost', 1)
window_sign_up.protocol('WM_DELETE_WINDOW', close_handler)
window_sign_up.geometry(f'300x200+{x + 320}+{y + 30}')
window_sign_up.title('用户注册')
window_sign_up.attributes("-toolwindow", 1)
new_name = StringVar() # 将输入的注册名赋值给变量
Label(window_sign_up, text='用 户 名:').place(x=15, y=20)
entry_new_name = Entry(window_sign_up, textvariable=new_name)
entry_new_name.place(x=100, y=20)
entry_new_name.focus_set() # 获得焦点
new_pwd = StringVar()
Label(window_sign_up, text='密 码:').place(x=15, y=60)
usr_pwd = Entry(window_sign_up, textvariable=new_pwd, show='*')
usr_pwd.place(x=100, y=60)
new_pwd_confirm = StringVar()
Label(window_sign_up, text='密码确认:').place(x=15, y=100)
usr_pwd_confirm = Entry(window_sign_up, textvariable=new_pwd_confirm, show='*')
usr_pwd_confirm.place(x=100, y=100)
btn_sign_up1 = Button(window_sign_up, text='注册', command=sign_to)
btn_sign_up1.place(x=180, y=150)
btn_login = Button(fr2, text='登录', command=usr_login)
btn_login.grid(row=2, column=0, padx=(40, 0), pady=8) # 2行0列
btn_sign_up = Button(fr2, text='注册', command=usr_sign_up)
btn_sign_up.grid(row=2, column=1, padx=(20, 0), pady=8) # 2行1列
root.mainloop()
def get_img(filename, width, height):
im = Image.open(filename).resize((width, height))
im = ImageTk.PhotoImage(im)
return im
def close_handler():
root.attributes('-disabled', 0)
window_sign_up.destroy()
def infodisplay():
root.attributes('-disabled', 1)
class Home(Frame):
"""主窗口"""
def __init__(self, master=None):
super().__init__(master) # 调用父类的初始化方法
self.root = master
self.root.title('股票自动交易系统')
x = int(self.root.winfo_screenwidth() / 2 - self.root.winfo_reqwidth() / 2)
y = int(self.root.winfo_screenheight() / 2 - self.root.winfo_reqheight() / 2)
self.root.geometry(f'1080x600+{x - 400}+{y - 220}')
self.root.resizable(False, False) # 不允许改变窗口大小
self.createWidget()
def createWidget(self):
"""创建组件"""
stus_str_var = StringVar()
stus_str_var.set("开 始 您 的 创 作 吧!")
stus_label = Label(self.root, textvariable=stus_str_var, fg='red', font=('Arial', 25),
anchor='center')
stus_label.pack(pady=100)
if __name__ == '__main__':
root = None
window_sign_up = None
main()
页面更新:2024-05-01
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号