两个窗口:在该主程序后首次登录 [英] Two windows: First Login after that main program
问题描述
我有这个程序
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()
`
我有这个问题.当我运行我的程序时,我可以看到登录窗口,当我点击登录按钮时,我得到了窗口main,但窗口登录只是被撤消了.因此,当我关闭窗口 main 时,我的程序仍在运行.我需要做这个.首先运行程序main,但是会不可见什么的.我只看到登录窗口(可能是顶层).当我点击按钮登录时,窗口 loginWindow 将得到 destroy() 并且窗口 main 将可见
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屋!