如何使用OOP将标签添加到另一个窗口tkinter

问题描述 投票:1回答:2

当我将标签添加到第二个窗口时,它不会添加到第二个窗口中,而是添加到了第一个窗口中。

class testing:
    def __init__(self,root):
        root.config(bg='orange')
        root.geometry("500x500")
        lbl = Label(text="WOW TEXT").pack()


class login:
    def __init__(self,root):
        root.config(bg='orange')
        root.geometry("500x500")
        self.login_form(root)


    def login_onlick(self):
        c.execute("SELECT * FROM Login WHERE Name = ? AND Password = ?",(self.e_name.get(),self.e_pass.get()))
        self.right_login = c.fetchall()

        if self.right_login:
            print("Login Now")
            self.top = testing(root=Tk())
        else:
            print("Wrong")    


    def login_form(self,root):
        self.lg_form=Label(root, text="Login Form",font="Times 40",bg='red',width=50)
        self.lg_form.pack()

        self.lbl_name=Label(root, text="Enter Name",font="times 20",bg='orange')
        self.lbl_name.pack()
        self.e_name = Entry(root,width=50)
        self.e_name.pack()
        self.lbl_pass=Label(root, text="Enter Password",font="times 20",bg='orange')
        self.lbl_pass.pack()
        self.e_pass = Entry(root,width=50)
        self.e_pass.pack()
        self.btn_create = Button(root,text="Login", bg ='green',width=13,height=4,command= self.login_onlick)
        self.btn_create.pack()

root = Tk()

login(root)

conn.commit()

root.mainloop()

The Output of My Program

python oop tkinter
2个回答
1
投票

您需要将Toplevel()用作任何辅助窗口,tkinter在具有多个Tk()调用时不能很好地工作。

我也试图固定您的间距以及一些功能名称,例如init__init__

from tkinter import *

class testing:
    def __init__(self, root):
        root.config(bg='orange')
        root.geometry("500x500")
        lbl = Label(text="WOW TEXT").pack()

class login:
    def __init__(self, root):
        self.login_form(root)

    def login_onlick(self, root):
        # Commented out for Testing
        #c.execute("SELECT * FROM Login WHERE Name = ? AND Password = ?",(self.e_name.get(),self.e_pass.get()))
        #self.right_login = c.fetchall()
        self.right_login = True #TESTING
        if self.right_login:
                print("Login Now")
                self.login_form(Toplevel(root))
        else:
                print("Wrong")

    def login_form(self, root):
        root.config(bg='orange')
        root.geometry("500x500")

        self.lg_form=Label(root, text="Login Form",font="Times 40",bg='red',width=50)
        self.lg_form.pack()

        self.lbl_name=Label(root, text="Enter Name",font="times 20",bg='orange')
        self.lbl_name.pack()

        self.e_name = Entry(root,width=50)
        self.e_name.pack()

        self.lbl_pass=Label(root, text="Enter Password",font="times 20",bg='orange')
        self.lbl_pass.pack()

        self.e_pass = Entry(root,width=50)
        self.e_pass.pack()

        self.btn_create = Button(root,text="Login", bg ='green',width=13,height=4,command=lambda:self.login_onlick(root))
        self.btn_create.pack()

root = Tk()
login(root)

# Commented out for Testing
#conn.commit()

root.mainloop()

enter image description here


0
投票

尽管如果已经创建了主窗口,则创建Tk()实例而不是Toplevel()实例是个坏主意,>不会引起问题,也不需要替换[C0 ]和Tk()在这里。

[在Testing类中创建Label窗口小部件时,应指定其所属的窗口,否则,它将尝试自动查找它(并非总是选择正确的窗口)。只需将Toplevel()类替换为:

Testing
© www.soinside.com 2019 - 2024. All rights reserved.