python Tkinter() 如何隐藏 UI [英] python Tkinter() how to hide the UI

查看:39
本文介绍了python Tkinter() 如何隐藏 UI的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Hi I am developing a single login in python using Tkinter(), I just only want that when the user Logged in correctly the login UI will be hidden and the content UI will display... so I was thinking that the ui can be hide or the visibility will be hidden? for example I had this code...

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()

推荐答案

这里有一个替代方案:定义框架中的每个页面".然后使用对 lift 的调用将适当的 Frame 提升到其他框架之上.(以下代码大量借鉴了 Bryan Oakley 的代码此处.)

Here is an alternative: Define each "page" in a Frame. Then use calls to lift to raise the appropriate Frame above the others. (The following code borrows heavily from Bryan Oakley's code here.)

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 框架,然后是一个后续框架:

Above I've only defined one kind of Frame, called Page. For your situation, you'd want a Login Frame, and then a subsequent Frame:

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

这篇关于python Tkinter() 如何隐藏 UI的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆