Если у меня есть окно входа в систему и я хочу войти в другое окно после того, как я вошел в систему, нужно ли мне использовать в нем другое определение? - PullRequest
0 голосов
/ 04 января 2019

новичок здесь, я надеялся открыть новое окно после того, как я зарегистрировал правильную запись, пытаясь поставить import filename.py, но она не будет отображаться после tm.showinfo. Я не знаю, какую функцию он будет выполнять одновременно с закрытием или выходом из окна входа в систему.

Я попробовал свой предыдущий способ сделать это, чтобы вызвать команду и создать для нее функцию, но теперь я совершенно запутался в этом,

from tkinter import * 
import tkinter.messagebox as tm

class adminlog(Frame):
    def __init__(self, master):
        super().__init__(master)

        self.label_username = Label(self, text="Username")
        self.label_password = Label(self, text="Password")
        self.entry_username = Entry(self)
        self.entry_password = Entry(self, show="*")

        self.label_username.grid(row=0, sticky=E)
        self.label_password.grid(row=1, sticky=E)
        self.entry_username.grid(row=0, column=1)
        self.entry_password.grid(row=1, column=1)

        self.logbtn = Button(self, text="Login as Admin", command=self.lg_admin)
        self.logbtn.grid(columnspan=2)

        self.pack()

    def lg_admin(self):
        un = self.entry_username.get()
        ps = self.entry_password.get()
        if un == "admin" and ps == "pito":
            tm.showinfo("Login Info", "Login Successfully")
            import adminpage
        else:
            tm.showerror("Login Error", "Incorrect password or username")

admin = Tk()
a = adminlog(admin)
admin.mainloop()

Я ожидаю, что после входа в систему откроется новое окно после показа tm.showinfo.

1 Ответ

0 голосов
/ 04 января 2019

Это действительно зависит от вашего выбора и ощущения. Я дам вам два метода и позволю вам решить.

Отказ от ответственности: Я предпочитаю первый метод.


Не рекомендуется создавать два Tk() окна в одной программе. Что вы можете сделать, так это иметь одно главное окно и настраивать его как и когда хотите. Вот, например, функция clear_widgets() очищает страницу входа и показывает следующую страницу.

import tkinter as tk
import tkinter.messagebox as tm

class adminlog(tk.Tk):
    def __init__(self):
        super().__init__()
        tk.Label(self, text="Username").grid(row=0, sticky="e")
        tk.Label(self, text="Password").grid(row=1, sticky="e")
        self.entry_username = tk.Entry(self)
        self.entry_password = tk.Entry(self, show="*")

        self.entry_username.grid(row=0, column=1)
        self.entry_password.grid(row=1, column=1)

        logbtn = tk.Button(self, text="Login as Admin", command=self.lg_admin)
        logbtn.grid(columnspan=2)

    def adminpage(self):
        self.clear_widgets()
        tk.Label(self, text='Hello Admin !!', bg='brown', fg='white').grid(row=0, column=1, padx=20, pady=20)

    def clear_widgets(self):
        for widget in self.winfo_children():
            widget.destroy()

    def lg_admin(self):
        un = self.entry_username.get()
        ps = self.entry_password.get()
        if un == "admin" and ps == "pito":
            tm.showinfo("Login Info", "Login Successfully")
            self.adminpage()
        else:
            tm.showerror("Login Error", "Incorrect password or username")

adminlog().mainloop()

enter image description here


Если вы действительно хотите другое окно и не можете обойтись без него, вы должны использовать Toplevel. Вот демонстрация.

import tkinter as tk
import tkinter.messagebox as tm

class adminlog(tk.Tk):
    def __init__(self):
        super().__init__()
        tk.Label(self, text="Username").grid(row=0, sticky="e")
        tk.Label(self, text="Password").grid(row=1, sticky="e")
        self.entry_username = tk.Entry(self)
        self.entry_password = tk.Entry(self, show="*")

        self.entry_username.grid(row=0, column=1)
        self.entry_password.grid(row=1, column=1)

        logbtn = tk.Button(self, text="Login as Admin", command=self.lg_admin)
        logbtn.grid(columnspan=2)

    def adminpage(self):
        adp = tk.Toplevel(self)
        tk.Label(adp, text='Hello Admin !!', bg='brown', fg='white').grid(row=0, column=1, padx=20, pady=20)

    def lg_admin(self):
        un = self.entry_username.get()
        ps = self.entry_password.get()
        if un == "admin" and ps == "pito":
            tm.showinfo("Login Info", "Login Successfully")
            self.adminpage()
        else:
            tm.showerror("Login Error", "Incorrect password or username")

adminlog().mainloop()

enter image description here

Здесь вы можете видеть, что окно входа в систему не исчезнет (если это произойдет, оно также возьмет с собой Toplevel). Поэтому я бы порекомендовал вам использовать первый метод.

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