登录正确后如何更改屏幕?

时间:2021-01-25 16:05:47

标签: python tkinter

我有两份代码,一个登录系统和一个学校申请,我想让它一旦我输入了正确的用户名和密码,我的学校申请就可以出现。我如何将两段代码合并在一起?

from tkinter import*
import tkinter.messagebox as messagebox
root=Tk()
root.geometry("600x300")

root.configure(bg='#003e53')
title=Label(root,text="Login", fg="white", bg="#003e53" ,font=("bold",15))
title.place(x=200, y=30)
uname=Label(root,text="User Name",fg="white",bg="#003e53",font=("bold",15))
uname.place(x=100,y=80)
password=Label(root,text="Password",fg="white",bg="#003e53",font=("bold",15))
password.place(x=100,y=110)
t_uname=Entry()
t_uname.place(x=200,y=80)
t_pwd=Entry()
t_pwd.place(x=200,y=110)

def validate_creds():
    uname=t_uname.get()
    password=t_pwd.get()
    if uname=="Supermarket" and password=="Password1":
        messagebox.showinfo(uname,"logged successfully")
    else:
        messagebox.showinfo(uname,"wrong credentials Mate")

submit=Button(root,text="Submit", command=validate_creds)
submit.place(x=200,y=140)
root.mainloop()

2 个答案:

答案 0 :(得分:0)

如果你想从另一个文件调用学校应用程序,你可以创建一个函数,在成功登录后,关闭当前的 Tkinter 窗口并使用模块 os 启动包含学校应用程序的文件。 (另外,import * 不是一个好习惯)

import os

#opening a file through the system
os.system("fily.py" "argument1")

至于合并两段代码,做两个不同的类,就这么简单!

from tkinter import *

class window1:
    def __init__(self):
        self.root=Tk()
        self.root.geometry("600x300")

    def window(self):

        button = Button(self.root, text="Press to close window", command=self.closewindow)
        button.pack()

        self.root.mainloop()

    def closewindow(self):
        self.root.destroy()

class window2:
    def __init__(self):
        self.root=Tk()
        self.root.geometry("600x300")

    def window(self):
        title=Label(self.root,text="Hey this is a new window!", fg="white", bg="#003e53" ,font=("bold",15))
        title.place(x=200, y=30)

        self.root.mainloop()

    def closewindow(self):
        self.root.destroy()

tkinter1 = window1()
tkinter1.window()
tkinter2 = window2()
tkinter2.window()

更重要的是,您可以在window2类中初始化window1类并制作一个函数来替换self.closewindow以关闭窗口并打开新窗口

答案 1 :(得分:0)

继承 tk.Tk 类并添加您的代码,如下所示。

import tkinter.messagebox as ms_box
import tkinter as tk

log_data = {
    'Supermarket': 'Password1',
    'user_2': '1234'
}

class Window(tk.Tk):

    @staticmethod
    def login_callback(user, passw):
        ms_box.showinfo('Success', user + " logged successfully")
        
    def frame_login_validate(self):
        user = self.username_entry.get()
        passw = self.password_entry.get()
        if user in log_data:
            if log_data[user] == passw:
                self.login_callback(user, passw)
                self.quit()
        else:
            if user:
                ms_box.showerror('Error', user + " wrong credentials")
            else:
                ms_box.showerror('Error', 'No username added')

    def frame_login(self):
        tk.Label(self.log_f, text="Login", fg="white", bg="#003e53", font=("bold", 12)).place(x=200, y=30)
        tk.Label(self.log_f, text="User Name", fg="white", bg="#003e53", font=("bold", 12)).place(x=100, y=80)
        tk.Label(self.log_f, text="Password", fg="white", bg="#003e53", font=("bold", 12)).place(x=100, y=110)
        self.username_entry = tk.Entry(self.log_f)
        self.username_entry.place(x=200, y=80)
        self.password_entry = tk.Entry(self.log_f)
        self.password_entry.place(x=200, y=110)
        tk.Button(self.log_f, text="Submit", command=self.frame_login_validate).place(x=200, y=140)

    def __init__(self):
        tk.Tk.__init__(self)
        self.geometry('600x300')

        self.username = None
        self.username_entry = None
        self.password = None
        self.password_entry = None

        self.log_f = tk.Frame(master=self)
        self.log_f.configure(bg='#003e53')
        self.log_f.pack(fill=tk.BOTH, expand=True)
        self.frame_login()


if __name__ == '__main__':
    window = Window()
    window.mainloop()

相关问题