PYTHON TKINTER如何检查Button是否存在,删除是否存在,如果不存在则继续执行?

时间:2018-01-19 20:05:00

标签: python tkinter

我正在创建一个测验应用。 登录后,将向用户显示创建的主屏幕 在一个功能。 完成测验后,会有一个结束屏幕(在另一个功能中创建),可以选择另一个测验,让用户回到主屏幕。

我要做的是删除结束屏幕按钮&如果在结束屏幕功能中创建标签/按钮,则主屏幕中的标签会起作用。

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

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())

导致名称错误。

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

注意如何在一个函数中创建{startquiz},但在下一个函数中删除。我的意图是在{endscreen()}中创建的所有内容都被删除如果用户按下{againbutton}这个问题我认为是因为在第一次运行时,代码试图删除尚未声明的内容。这就是为什么我要检查它是否存在并且迄今为止没有成功的

2 个答案:

答案 0 :(得分:1)

断言:

endtext = tkinter.Label(...)

againbutton = tkinter.Button(...)

然后一个简单的:

if endtext:

或:

if againbutton:

应该足够,因为它们是在可访问范围内声明的非空对象,在本例中为 global 范围。

答案 1 :(得分:0)

问题是在endtext的第一次调用中未声明againbuttonhomeScreen()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()