Как я могу перенаправить в основной проект, если вход в систему был успешным в Python с использованием Sqlite3 - PullRequest
0 голосов
/ 17 февраля 2020

Я создаю 'Система управления сотрудниками', используя Python и базу данных Sqlite. Я создал 2 python файлы- 1) Для главной страницы, используя 'tkinter', чтобы вставить Сведения о сотрудниках в базу данных (Employee1.db) , 2) Для страницы входа в систему используйте «tkinter», чтобы перенаправить пользователя на главную страницу, если указанные «имя пользователя» и «Пароль» присутствуют в базе данных (db_member1.db). Я хочу перенаправить пользователя на главную страницу «Системы управления сотрудниками» со страницы входа в систему, если пользователь успешно вошел в систему, что означает, что «имя пользователя» и «пароль» действительны. У меня проблема с перенаправлением на главную страницу если вход выполнен успешно.

Ниже приведен код для главной страницы «Системы управления сотрудниками» (Employee_Dbms.py) -

from tkinter import *
import tkinter.messagebox
import sqlite3
class Employee:
    def __init__(self,root):
        p=Database()
        p.conn()
        self.root=root
        self.root.title("EMPLOYEE MANEGEMENT SYSTEM")
        self.root.geometry("1300x7500+0+0")
        self.root.config(bg="cadet blue")
        EmpId=StringVar()
        firstname=StringVar()
        lastname=StringVar()
        dob=StringVar()
        def close():
            print("employee:close method called")
            close=tkinter.messagebox.askyesno("EMPLOYEE MANAGEMENT SYSTEM","confirm if you want to exit")
            if(close>0):
                root.destroy()
                print("employee:close method finished\n")
                return
        def clearData():
            print("employee:clear method called")
            self.txtEmpId.delete(0,END)
            self.txtEmpfna.delete(0,END)
            self.txtEmplna.delete(0,END)
            self.txtEmpdob.delete(0,END)
            self.txtEmpage.delete(0,END)
            self.txtEmpgen.delete(0,END)
            self.txtEmpadd.delete(0,END)
            self.txtEmpms.delete(0,END)
            self.txtEmpemail.delete(0,END)
            self.txtEmpmob.delete(0,END)
            print("employee:clear method finished\n")

        def insert():
            print("employee:insert method called")
            if(len(EmpId.get())!=0):
                p.insert(EmpId.get(),firstname.get(),lastname.get(),dob.get())
                Emplist.delete(0,END)
                Emplist.insert(END,EmpId.get(),firstname.get(),lastname.get(),dob.get())
            else:
                tkinter.messagebox.showwarning("EMPLOYEE MANAGEMENT SYSTEM","Atleast enter Employee ID")
            print("employee:insert method finished\n")

        MainFrame=Frame(self.root,bg="cadet blue")
        MainFrame.grid()
        TitFrame=Frame(MainFrame,bd=2,padx=54,pady=8,bg="ghost white",relief=RIDGE)
        TitFrame.pack(side=TOP)
        self.lblTit=Label(TitFrame,font=('algerian',45,'bold'),text="EMPLOYEE MANAGEMENT SYSTEM",bg="ghost white",fg="brown")
        self.lblTit.grid()
        ButtonFrame=Frame(MainFrame,bd=2,width=1350,height=5,bg="pink",relief=RIDGE)
        ButtonFrame.pack(side=BOTTOM)
        DataFrame=Frame(MainFrame,bd=2,width=1300,height=400,padx=20,pady=20,bg="cadet blue",relief=RIDGE)
        DataFrame.pack(side=BOTTOM)
        DataFrameLEFT=LabelFrame(DataFrame,bd=1,width=100,height=600,padx=20,pady=3,bg="ghost white",relief=RIDGE,font=('arial',22,'bold'),fg="purple",text="EMPLOYEE INFORMATION\n")
        DataFrameLEFT.pack(side=LEFT)
        DataFrameRIGHT=LabelFrame(DataFrame,bd=1,width=100,height=1000,padx=20,pady=30,bg="ghost white",relief=RIDGE,font=('arial',22,'bold'),fg="purple",text="EMPLOYEE DETAILS\n")
        DataFrameRIGHT.pack(side=RIGHT)
        self.lblEmpId=Label(DataFrameLEFT,font=('arial',20,'bold'),text="Employee ID:",padx=2,pady=2,bg="ghost white")
        self.lblEmpId.grid(row=0,column=0,sticky=W)
        self.txtEmpId=Entry(DataFrameLEFT,font=('arial',20,'bold'),textvariable=EmpId,width=39)
        self.txtEmpId.grid(row=0,column=1)
        self.lblEmpfna=Label(DataFrameLEFT,font=('arial',20,'bold'),text="First Name:",padx=2,pady=2,bg="ghost white")
        self.lblEmpfna.grid(row=1,column=0,sticky=W)
        self.txtEmpfna=Entry(DataFrameLEFT,font=('arial',20,'bold'),textvariable=firstname,width=39)
        self.txtEmpfna.grid(row=1,column=1)
        self.lblEmplna=Label(DataFrameLEFT,font=('arial',20,'bold'),text="Last Name:",padx=2,pady=2,bg="ghost white")
        self.lblEmplna.grid(row=2,column=0,sticky=W)
        self.txtEmplna=Entry(DataFrameLEFT,font=('arial',20,'bold'),textvariable=lastname,width=39)
        self.txtEmplna.grid(row=2,column=1)
        self.lblEmpdob=Label(DataFrameLEFT,font=('arial',20,'bold'),text="Date Of Birth(DD/MM/YYYY):",padx=2,pady=2,bg="ghost white")
        self.lblEmpdob.grid(row=3,column=0,sticky=W)
        self.txtEmpdob=Entry(DataFrameLEFT,font=('arial',20,'bold'),textvariable=dob,width=39)
        self.txtEmpdob.grid(row=3,column=1)

        self.btnAddData=Button(ButtonFrame,text="SAVE",font=('comic san',22,'bold'),height=1,width=8,bd=4,command=insert)
        self.btnAddData.grid(row=0,column=0)

        self.btnClearData=Button(ButtonFrame,text="RESET",font=('comic san',22,'bold'),height=1,width=8,bd=4,command=clearData)
        self.btnClearData.grid(row=0,column=2)

        self.btnExitData=Button(ButtonFrame,text="EXIT",font=('comic san',22,'bold'),height=1,width=8,bd=4,command=close)
        self.btnExitData.grid(row=0,column=6)
class Database:
    def conn(self):
        print("Database: connection method called")
        con=sqlite3.connect("Employee1.db")
        cur=con.cursor()
        query="create table if not exists employee(EmpID integer primary key,\
                Firstname text,Lastname text,DOB text)"
        cur.execute(query)
        con.commit()
        con.close()
        print("Database:Connection method finished\n")
    def insert(self,EmpID,Firstname,Lastname,DOB):
        print("Database: insert method called")
        con=sqlite3.connect("Employee1.db")
        cur=con.cursor()
        query="insert into employee values(?,?,?,?)"
        cur.execute(query,(EmpID,Firstname,Lastname,DOB))
        con.commit()
        con.close()
        print("Database:insert method finished\n")      
if __name__=='__main__':
    root=Tk()
    application=Employee(root)
    root.mainloop()

Ниже приведен код для страницы входа (logincheck.py) -

from tkinter import *
import tkinter.messagebox as tkMessageBox
import sqlite3
import Employee_Dbms as em
root1 = Tk()
root1.title("Employee Management System")

width = 640
height = 480
screen_width = root1.winfo_screenwidth()
screen_height = root1.winfo_screenheight()
x = (screen_width/2) - (width/2)
y = (screen_height/2) - (height/2)
root1.geometry("%dx%d+%d+%d" % (width, height, x, y))
root1.resizable(0, 0)


USERNAME = StringVar()
PASSWORD = StringVar()

def Database():
    global conn, cursor
    conn = sqlite3.connect("db_member1.db")
    cursor = conn.cursor()
    cursor.execute("CREATE TABLE IF NOT EXISTS `member` (mem_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, username TEXT, password TEXT)")


def LoginForm():
    global LoginFrame, lbl_result1
    LoginFrame = Frame(root1)
    LoginFrame.pack(side=TOP, pady=80)
    lbl_username = Label(LoginFrame, text="Username:", font=('arial', 25), bd=18)
    lbl_username.grid(row=1)
    lbl_password = Label(LoginFrame, text="Password:", font=('arial', 25), bd=18)
    lbl_password.grid(row=2)
    lbl_result1 = Label(LoginFrame, text="", font=('arial', 18))
    lbl_result1.grid(row=3, columnspan=2)
    username = Entry(LoginFrame, font=('arial', 20), textvariable=USERNAME, width=15)
    username.grid(row=1, column=1)
    password = Entry(LoginFrame, font=('arial', 20), textvariable=PASSWORD, width=15, show="*")
    password.grid(row=2, column=1)
    btn_login = Button(LoginFrame, text="Login", font=('arial', 18), width=35, command=Login)
    btn_login.grid(row=4, columnspan=2, pady=20)

def ToggleToLogin(event=None):
    LoginForm()

def Login():
    Database()
    if USERNAME.get == "" or PASSWORD.get() == "":
        lbl_result1.config(text="Please complete the required field!", fg="orange")
    else:
        cursor.execute("SELECT * FROM `member` WHERE `username` = ? and `password` = ?", (USERNAME.get(), PASSWORD.get()))
        if cursor.fetchone() is not None:
            lbl_result1.config(text="You Successfully Login", fg="blue")
            em.Employee()
        else:
            lbl_result1.config(text="Invalid Username or password", fg="red")
LoginForm()

menubar = Menu(root1)
filemenu = Menu(menubar, tearoff=0)
root1.config(menu=menubar)


if __name__ == '__main__':
    root1.mainloop()

Когда я запускаю «logincheck.py» для перенаправления на главную страницу, если вход выполнен успешно, он показывает желаемое сообщение, если «имя пользователя» или «пароль» имеет значение InvalidF, но показывает следующее «Ошибка», если «Войти» успешно -

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Sudarshana\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:\Users\Sudarshana\AppData\Local\Programs\Python\Python37-32\logincheck.py", line 56, in Login
    em.Employee()
TypeError: __init__() missing 1 required positional argument: 'root'

Пожалуйста, помогите ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...