我想先弹出一个登录窗口,一旦条件满足,它就会关闭登录窗口,打开一个新窗口。你知道吗
from Tkinter import *
import tkMessageBox
#Not really sure what i'm doing here anymore
while True:
Login = Tk()
Login.title('Login')
Login.geometry('400x130')
NameLabel = Label(Login, text='Username')
NameLabel.place(bordermode=OUTSIDE, height=25, width=100, x=100)
NameEntryRaw = Entry(Login)
NameEntryRaw.place(bordermode=OUTSIDE, height=25, width=100, x=200)
CodeLabel = Label(Login, text='Code')
CodeLabel.place(bordermode=OUTSIDE, height=25, width=100, x=100, y=30)
CodeEntryRaw = Entry(Login)
CodeEntryRaw.place(bordermode=OUTSIDE, height=25, width=100, x=200, y=30)
def tbd():
tkMessageBox.showinfo('Congrats!', 'This program is not done yet')
def login():
Usernames=list()
Usernames.append('Mordecai')
Usernames.append('Ezekiel')
Usernames.append('Goliath')
Usernames.append('Abraham')
Usernames.append('Bartholomew')
Usernames.append('Jedediah')
Usernames.append('Solomon')
Usernames.append('Tobias')
Usernames.append('Yohanan')
Usernames.append('Lucifer')
NameEntry=NameEntryRaw.get()
CodeEntry=CodeEntryRaw.get()
CodeReal='116987'
if Usernames.count(NameEntry) == 0:
tkMessageBox.showinfo('Error!', 'Your Username is invalid! Try Again.')
else:
()
if CodeEntry != CodeReal:
tkMessageBox.showinfo('Error!', 'The Code entered is invalid! Try Again.')
else:
()
LoginButton = Button(Login, text="Login", command=login)
LoginButton.place(bordermode=OUTSIDE, height=50, width=200, x=100, y=60)
Login.mainloop()
else:
DataBase = Tk()
#this will be the data base
DataBase.mainloop()
我要感谢你澄清你为我做了什么。它被证明是非常有用的!这是我已经解决的问题。我把名字放回原处,让它不用上课就可以工作,因为我发现这有点太难了。你知道吗
它有相同的基本功能,只是按照我想要的方式组织。你知道吗
你不想使用两个
mainloop
。一般来说,你的tkinter应用程序应该有一个.mainloop
名为。你知道吗至于如何获得登录弹出窗口,然后切换到窗口。。。你可以用应用程序创建你的根窗口,当你启动你的程序时,会有一个
Toplevel
窗口显示登录信息,也许会另外隐藏/收回根?,让顶层有一个提交按钮或一些可以验证凭据的东西。如果凭据有效,那么您可以使用destroy()
方法删除主应用程序的顶级小部件/转到根窗口。你知道吗有一个
while True
重复创建GUI+mainloop的过程显然是不好的。你知道吗编辑:对于可变对象来说,static可能不是一个好词,因为它是可变的。。。为全局添加了tuple vs list。你知道吗
您不需要创建一个空列表,然后使用
append
将您的用户名添加到usernames
列表中。你可以让这个全球化。因为username是一个可变的对象(它是一个列表),所以您仍然可以在这个全局对象上的代码中的其他地方执行操作,比如.append等等。或者,如果您从未进行过这些更改,我会将其设为一个元组,因为它们是不可变的,而且这更符合您的意图。你知道吗与使用
.count(*)
获取列表中某个元素的出现次数不同,您只需使用:如果
CodeReal
是静态的(看起来是静态的),那么也可以将其设为全局的。你知道吗下面是对代码的一个快速编辑,您可以不使用类来完成此操作,但是我在这里使用类来尝试清楚地显示程序中的逻辑分隔。你知道吗
我还更改了一些变量名,这样更容易阅读/理解。我还使用了
.pack()
和.grid()
,因为这比在任何地方使用.place()
都要快——这是一个任意的选择。你知道吗相关问题 更多 >
编程相关推荐