Python 3.x 提示在Tkinter中无限次打开
在我之前的问题中,弗拉维奥·莫雷斯向我建议了一个密码 当我试图在我的主代码中实现它时,我在这里记录了一个错误: 下面是一段代码,它产生了完全相同的错误:Python 3.x 提示在Tkinter中无限次打开,python-3.x,tkinter,Python 3.x,Tkinter,在我之前的问题中,弗拉维奥·莫雷斯向我建议了一个密码 当我试图在我的主代码中实现它时,我在这里记录了一个错误: 下面是一段代码,它产生了完全相同的错误: from tkinter import * def login(): #ALL GIFs etc. top.resizable(0, 0) top.title("IDLE for MySQL- Login") top.geometry("1080x720") su
from tkinter import *
def login():
#ALL GIFs etc.
top.resizable(0, 0)
top.title("IDLE for MySQL- Login")
top.geometry("1080x720")
submit_button = Button(top,
text="Login", fg="#FFFFFF", bd=4, bg="#000000", width=8, font=("Helvetica", 18), command=check).place(
x=410,
y=400)
quit_button = Button(top,
text="Quit", fg="#FFFFFF", bd=4, bg="#000000", width=8, font=("Helvetica", 18), command=exit).place(
x=550,
y=400)
def check():
global nlabel, top
#user = _id.get() [_id = Entry]
#passw = _p.get() [_p = Entry]
global mydb, c
while True:
try:
"""
mydb = mysql.connector.connect(
host="localhost",
user=user,
password=passw
)
c = mydb.cursor(buffered=True)"""
raise TypeError #Any error just to produce a "Wrong Password" Effect
except:
inc = Toplevel()
inc.wait_visibility()
inc.grab_set_global()
inc.focus_set()
inc.geometry("300x100")
msg = Label(inc,
text="Incorrect User ID/ Password", font=("Helvetica", 12)).place(
x=10,
y=15)
button1 = Button(inc,
text="Ok", bg="#FFFFFF", bd=3, fg="#000000", font=("Helvetica", 18), command=closepop).place(
x=190,
y=55)
button2 = Button(inc,
text="Exit", bg="#FFFFFF", bd=3, fg="#000000", font=("Helvetica", 18), command=exit).place(
x=240,
y=55)
else:
break
def closepop():
global inc
inc.grab_release()
inc.destroy()
top = Tk()
login()
top.mainloop()
据我所知,问题在于每次代码检查密码时,无论用户是否按下任何按钮。我甚至试着将它对接到一个循环中,但这也不起作用。而True循环是一个无限循环,在循环中,您会引发一个错误,这将导致执行
除了
块之外的块,并且由于您没有正确地打破循环,因此它会继续发生。目前还不清楚您试图对代码做什么,但这就是问题所在。一种可能的解决方案是使用after()
,它将在给定的时间内重复函数,如root。在(5000,check)
之后,这将在5000ms(5秒)后执行check()
。而True
循环是一个无限循环,并且在循环内引发错误,这将导致除
块之外的块的执行,并且由于您没有正确地跳出循环,所以它会继续发生。目前还不清楚您试图对代码做什么,但这就是问题所在。一个可能的解决方案是使用after()
,它将在给定的时间内重复函数,如root。在(5000,检查)
之后,这将在5000ms(5秒)后执行check()
。这不是因为while
循环吗?这是一个无限循环,一直在运行,最后总是出错?所以except块被执行,它的窗口永远弹出,因为它是一个无限循环。是的,非常感谢。我真的很抱歉我是Python新手,所以我有时会犯这些愚蠢的错误。@CoolCloud我建议您将其作为一个答案,这样我就可以接受它,问题就结束了。这不是因为while
循环吗?这是一个无限循环,一直在运行,最后总是出错?所以except块被执行,它的窗口永远弹出,因为它是一个无限循环。是的,非常感谢。我真的很抱歉,我是Python新手,所以我有时会犯这些愚蠢的错误。@CoolCloud我建议您将其作为一个答案,这样我就可以接受了,问题就结束了。