我正在创建一个测验应用。 登录后,将向用户显示创建的主屏幕 在一个功能。 完成测验后,会有一个结束屏幕(在另一个功能中创建),可以选择另一个测验,让用户回到主屏幕。
我要做的是删除结束屏幕按钮&如果在结束屏幕功能中创建标签/按钮,则主屏幕中的标签会起作用。
我试图运行的代码的简化版本。
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}这个问题我认为是因为在第一次运行时,代码试图删除尚未声明的内容。这就是为什么我要检查它是否存在并且迄今为止没有成功的
答案 0 :(得分:1)
断言:
endtext = tkinter.Label(...)
和
againbutton = tkinter.Button(...)
然后一个简单的:
if endtext:
或:
if againbutton:
应该足够,因为它们是在可访问范围内声明的非空对象,在本例中为 global 范围。
答案 1 :(得分:0)
问题是在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()