两个窗口:在该主程序后首次登录 [英] Two windows: First Login after that main program

查看:32
本文介绍了两个窗口:在该主程序后首次登录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个程序

class loginWindow():
    def __init__(self, master):
        self.master = master
        self.frame = Frame(master)
        master.title(u"Geometry Calc - Login")
        Button(master, text="Login", command=self.login).pack()

    def login(self):
        self.newWindow = Toplevel(self.master)
        main(self.newWindow)
        self.master.withdraw()


class main():
    def __init__(self, master):
        # Nastavení nového okna
        master.title(u"Geometry Calc")  # Nadpis
        master.geometry("695x935")  # Rozmery v px
        master.config(background="white")
        master.resizable(width=FALSE, height=FALSE)  # Zakážeme změnu rozměrů uživatelem - zatím..

        menubar = Menu(master)

        helpmenu = Menu(menubar, tearoff=0)
        helpmenu.add_command(label="Konec", command=master.quit)
        menubar.add_cascade(label="Soubor", menu=helpmenu)
        helpmenu = Menu(menubar, tearoff=0)
        helpmenu.add_command(label="O programu", command=self.createAbout)
        menubar.add_cascade(label="Pomoc", menu=helpmenu)
        master.config(menu=menubar)

        canvas = Canvas(master, width=691, height=900)
        canvas.pack(expand=1, fill=BOTH)
        self.showImage(canvas, 347, 454, "geometry_table.jpg")


root = Tk()
app = loginWindow(root)
root.mainloop()
`

我有这个问题.当我运行我的程序时,我可以看到登录窗口,当我点击登录按钮时,我得到了窗口ma​​in,但窗口登录只是被撤消了.因此,当我关闭窗口 ma​​in 时,我的程序仍在运行.我需要做这个.首先运行程序ma​​in,但是会不可见什么的.我只看到登录窗口(可能是顶层).当我点击按钮登录时,窗口 loginWindow 将得到 destroy() 并且窗口 ma​​in 将可见

and i have this problem. When i run my program, i can see login window, when i hit login button I get window main, but window login is only withdrawed. So when i close window main my program still run. And i need make this. First run program main, but will be invisible or something. And i see only login window (maybe Toplevel). When i hit button login the window loginWindow will get destroy() and the window main will be visible

推荐答案

您可以使用 Toplevel 作为登录窗口和 withdraw , deiconify 方法分别隐藏和显示根窗口.

You can use Toplevel for login window and withdraw , deiconify methods to hide and show root window respectively.

检查以下代码:

from Tkinter import *


class loginWindow(Toplevel):
    def __init__(self, title, parent):
        Toplevel.__init__(self, parent)
        # Save parent reference to use it 
        self.parent = parent
        self.parent.title(u"Geometry Calc - Login")
        Button(self, text="Login", command=self.login).pack()

    def login(self):

        access =  True # Used to test if a user can login.

        if access:
            # Close Toplevel window and show root window
            self.destroy()
            self.parent.deiconify()
        else:
            self.parent.quit()



class main(Tk):
    def __init__(self, *args, **kwargs):
        Tk.__init__(self, *args, **kwargs)
        self.title(u"Geometry Calc")  # Nadpis
        self.geometry("695x935")  # Rozmery v px
        self.config(background="white")
        self.resizable(width=FALSE, height=FALSE)  # Zakážeme změnu rozměrů uživatelem - zatím..

        menubar = Menu(self)

        helpmenu = Menu(menubar, tearoff=0)
        helpmenu.add_command(label="Konec", command=self.quit)
        menubar.add_cascade(label="Soubor", menu=helpmenu)
        helpmenu = Menu(menubar, tearoff=0)
        helpmenu.add_command(label="O programu", command=self.createAbout)
        menubar.add_cascade(label="Pomoc", menu=helpmenu)
        self.config(menu=menubar)

        canvas = Canvas(self, width=691, height=900)
        canvas.pack(expand=1, fill=BOTH)

        # Hide root window
        self.withdraw()

        # Lunch login window
        loginWindow('Frame', self)


    def createAbout(self):
        pass

    def quit(self):
        self.destroy()



app = main()

app.mainloop()

如果你想在登录和主应用程序中使用 2 个顶层窗口,root window 应该隐藏:

If youn want to use 2 Toplevel windows for login and main app, root window should be hidden:

class loginWindow(Toplevel):
    def __init__(self, title, parent):
        Toplevel.__init__(self, parent)
        ...

    def login(self):
       if access:
            # Close Toplevel window and lunch root window
            self.destroy()
            main()



class main(Toplevel):
    def __init__(self, *args, **kwargs):
        Toplevel.__init__(self, *args, **kwargs)
        ...



root = Tk()
root.withdraw()

loginWindow('title', root)

root.mainloop()  

这篇关于两个窗口:在该主程序后首次登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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