Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 提示在Tkinter中无限次打开_Python 3.x_Tkinter - Fatal编程技术网

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我建议您将其作为一个答案,这样我就可以接受了,问题就结束了。