登陆界面源码
应粉丝要求上源码# -*- 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()