3

嗨,我正在使用 Tkinter() 在 python 中开发单个登录,我只希望当用户正确登录时,登录 UI 将被隐藏并且内容 UI 将显示......所以我认为 ui 可以隐藏或者可见性将被隐藏?例如我有这个代码......

def httpGETCheck(username, password):
    .... 
    # assumed that the user is correct
    if registeredUser:
        # how can I hide or set visible is false to all the UI in the showLogin() Module
        # and how can I show the showContent() UI or replaced the showContent() UI from showLogin() UI

class ContentUI():
    def showContent(self, frame):
        button1 = Button(frame, text="+", width=15, command=counterPlus)
        button1.grid()

    def showLogin(self, frame):
        self.contentUI = ContentUI()    

        L1 = Label(frame, text="User Name")
        L1.pack( side = LEFT)
        L1.grid()

        E1 = Entry(frame, bd =5)
        E1.pack(side = RIGHT)
        E1.grid()

        L2 = Label(frame, text="Password")
        L2.pack( side = LEFT)
        L2.grid()       

        E2 = Entry(frame, bd =5, show="*")
        E2.pack(side = RIGHT)
        E2.grid()

        submit = Button(frame, text="Login", width=15, command=lambda: httpGETCheck(E1.get(), E2.get())) 
        submit.grid()

class UIDisplay():
    def play(self):
        root = Tk()

        root.title(title)
        root.geometry(dimension)

        app = Frame(root)

        contentUI = ContentUI()
        contentUI.showLogin(app)

        app.grid()


        root.mainloop()

ad = UIDisplay()
ad.play()
4

1 回答 1

2

这是一种替代方法:在 Frame 中定义每个“页面”。然后使用调用来lift将适当的框架提升到其他框架之上。(以下代码大量借鉴了 Bryan Oakley 的代码

import tkinter as tk
class Page(tk.Frame):
    def __init__(self, master, text, height, width, *args, **kwargs):
        tk.Frame.__init__(self, *args, borderwidth=20, **kwargs)
        self.height = height
        self.width = width
        button = tk.Button(self, text=text, font=('Comic Sans MS', 20),
                           command=lambda: self.callback())
        button.pack(side="top", fill="both", expand=True)
    def onlift(self):
        root.geometry('{}x{}'.format(self.width, self.height))
        self.lift()

class App(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)

        p1 = Page(self, 'Login 1', height=200, width=300)
        p2 = Page(self, 'Next page is 2', height=400, width=300)
        p3 = Page(self, 'We love number 3', height=400, width=600)
        p1.callback = p2.onlift
        p2.callback = p3.onlift
        p3.callback = p1.onlift

        p1.place(x=0, y=0, relwidth=1, relheight=1)
        p2.place(x=0, y=0, relwidth=1, relheight=1)
        p3.place(x=0, y=0, relwidth=1, relheight=1)

        p1.onlift()

root = tk.Tk()
app = App(root)
root.mainloop()

上面我只定义了一种Frame,称为Page. 对于您的情况,您需要一个Login框架,然后是一个后续框架:

    p1 = Login(self, ...)
    p2 = Registered(self, ...)

于 2013-10-16T13:24:53.310 回答