Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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 TKINTER如何检查按钮是否存在,如果存在则删除,如果不存在则继续?_Python_Tkinter - Fatal编程技术网

PYTHON TKINTER如何检查按钮是否存在,如果存在则删除,如果不存在则继续?

PYTHON TKINTER如何检查按钮是否存在,如果存在则删除,如果不存在则继续?,python,tkinter,Python,Tkinter,我正在创建一个测验应用程序。 登录后,用户将看到一个主屏幕,该屏幕将被创建 在函数中。 完成测验后,会出现一个结束屏幕(在另一个函数中创建),其中包含进行另一个测验的选项,该选项会将用户带回主屏幕 如果在“结束屏幕”功能中创建的标签/按钮存在,我尝试删除“主屏幕”功能中的“结束屏幕”按钮和标签。 我试图运行的代码的简化版本 from tkinter import * def homeScreen(): global endtext, againbutton if endtext

我正在创建一个测验应用程序。 登录后,用户将看到一个主屏幕,该屏幕将被创建 在函数中。 完成测验后,会出现一个结束屏幕(在另一个函数中创建),其中包含进行另一个测验的选项,该选项会将用户带回主屏幕

如果在“结束屏幕”功能中创建的标签/按钮存在,我尝试删除“主屏幕”功能中的“结束屏幕”按钮和标签。

我试图运行的代码的简化版本

from tkinter import *

def homeScreen():
    global endtext, againbutton
    if endtext.winfo_exists() == 1:
        endtext.destroy()
        againbutton.destroy()

    successlogin=label(window, text=("You are logged in as: " + Username))
    successlogin.grid(column=1, row=4)
    global startquiz
    startquiz=Button(window, text="Start Quiz", command=quiz)
    startquiz.grid(column=1, row=4)

def quiz():
    global startquiz
    startquiz.destroy()

    #Display questions and check answers etc. etc.

    endscreen() #On completion of quiz

def endScreen():
    global endtext, againbutton
    endtext=Label(window, text="quiz complete")
    endtext.grid(column=1, row=1)
    againbutton=Button(window, text="again", command=homescreen)
    againbutton.grid(column=1, row=2)

window=Tk()
window.mainloop()

homeScreen()
我尝试使用endtext.winfo_exists()来实现这一点,但出现了一个名称错误,表示未定义endtext。即使只是放

print(endtext.winfo_exists())
导致名称错误

当按下againbutton时,会调用homescreen(),但endtext和againbutton会停留在窗口上,妨碍其他标签和按钮


请注意{startquiz}如何在一个函数中创建,但在下一个函数中删除。我的意图是,如果用户按下{againbutton},则删除在{endscreen()}中创建的所有内容。我认为问题在于,在第一次运行时,代码试图删除一些尚未声明的内容。这就是为什么我要检查它是否存在并且到目前为止没有成功执行此操作的原因。断言:

endtext = tkinter.Label(...)
以及:

然后是一个简单的例子:

if endtext:
或:

应该足够了,因为它们是在可访问范围(在本例中为全局范围)中声明的非空对象。

断言:

endtext = tkinter.Label(...)
以及:

然后是一个简单的例子:

if endtext:
或:


应该足够了,因为它们是在可访问范围(在本例中为全局范围)中声明的非空对象。

问题是,
endtext
againbutton
在第一次调用
homeScreen()
endscreen()
下面添加此函数以删除属性

def clearEnd():
    global endtext, againbutton

    endtext.destroy()
    againbutton.destroy()

    homescreen()
给予:

from tkinter import *

def homeScreen()
    successlogin=label(window, text=("You are logged in as: " + Username)
    global startquiz
    startquiz=Button(window, text="Start Quiz", command=quiz)
    startquiz.grid(column=1, row=4)

def quiz():
    global startquiz
    startquiz.destroy()

    #Display questions and check answers etc. etc.

    endscreen() #On completion of quiz

def endScreen()
    global endtext, againbutton
    endtext=Label(window, text="quiz complete")
    endtext.grid(column=1, row=1)
    againbutton=Button(window, text="again", command=homescreen)
    againbutton.grid(column=1, row=2)

def clearEnd():
    global endtext, againbutton

    endtext.destroy()
    againbutton.destroy()

    homescreen()

问题是第一次调用
主屏幕()
endscreen()
下面添加此函数以删除属性

def clearEnd():
    global endtext, againbutton

    endtext.destroy()
    againbutton.destroy()

    homescreen()
给予:

from tkinter import *

def homeScreen()
    successlogin=label(window, text=("You are logged in as: " + Username)
    global startquiz
    startquiz=Button(window, text="Start Quiz", command=quiz)
    startquiz.grid(column=1, row=4)

def quiz():
    global startquiz
    startquiz.destroy()

    #Display questions and check answers etc. etc.

    endscreen() #On completion of quiz

def endScreen()
    global endtext, againbutton
    endtext=Label(window, text="quiz complete")
    endtext.grid(column=1, row=1)
    againbutton=Button(window, text="again", command=homescreen)
    againbutton.grid(column=1, row=2)

def clearEnd():
    global endtext, againbutton

    endtext.destroy()
    againbutton.destroy()

    homescreen()

请提供一个更好的答案。不申报是什么意思?如果你是说没有定位(endtext.grid(…),我已经这样做了,但是为了简化问题,我忽略了它。我知道上面的确切代码不起作用。我试图简化代码,因为我有很多与我的问题无关的其他代码。我试图添加更多的代码,这可能会使我的意图更加明显。我的意图是,如果用户按下{againbutton},则删除在{endscreen()}中创建的所有内容。我认为问题在于,在第一次运行时,代码试图删除一些尚未声明的内容。这就是为什么我要检查它是否存在,并且到目前为止没有成功@Nae“我知道上面的确切代码不起作用。”除非要解决上述代码不起作用的问题,否则不应出现这种情况。请提供更好的答案。不声明是什么意思?如果你是说没有定位(endtext.grid(…),我已经这样做了,但是为了简化问题,我忽略了它。我知道上面的确切代码不起作用。我试图简化代码,因为我有很多与我的问题无关的其他代码。我试图添加更多的代码,这可能会使我的意图更加明显。我的意图是,如果用户按下{againbutton},则删除在{endscreen()}中创建的所有内容。我认为问题在于,在第一次运行时,代码试图删除一些尚未声明的内容。这就是为什么我要检查它是否存在,并且到目前为止没有成功@Nae“我知道上面的确切代码不起作用。”不应该是这种情况,除非上面的代码不起作用是需要解决的问题。