【发布时间】:2021-08-06 11:39:07
【问题描述】:
我知道如何使用附加到按钮的命令来更改标签的颜色,但我想根据变量的值以编程方式进行。
如果向build_window函数发送错误消息,我想在带有红色背景的标签上显示错误消息,如果发送非错误消息,则不显示消息且没有颜色预计会有变化。
在我的代码中,我两次调用该函数来构建一个 tkinter 窗口。 第一次,我传递一个非错误消息,第二次,一个错误消息。
我的代码用于在预期时显示错误消息,问题仅在于更改错误消息标签的背景颜色。
如果我取消注释显示的l1.config(bg="red") 命令,则在将错误消息传递给build_window() 时会收到此错误:
UnboundLocalError: local variable 'l1' referenced before assignment
在l1.config(bg="red") 命令上。
如果我将整个 if 结构移动到 mainloop() 之前,即使在传递非错误消息时也会收到此错误:
UnboundLocalError: local variable 'error_message' referenced before assignment
在l1=Label(root,text = error_message) 命令上。
如果我将global l1 和global error_message 添加到build_window(),我得到的错误是这样的:
tkinter.TclError: invalid command name ".!label"
我也试过最初用bg="red"定义标签,希望当我发送一个长度为零的字符串时,它仍然是灰色的,但它在l1标签的中间显示了一点红色。
我一直在编写简单的 python,但我是 GUI 应用程序的新手,每次尝试某些东西时 tkinter 都会让我感到困惑。
我已经搜索了解决方案,但找不到任何解决在不使用按钮附加命令的情况下更改窗口的方法。
任何建议或澄清将不胜感激!
from tkinter import Tk, IntVar, Label, mainloop, Button
def build_window(incoming_error_message) :
if incoming_error_message == "initial value" :
error_message = ""
else :
#l1.config(bg="red")
error_message = incoming_error_message
def quitHandler():
root.destroy()
root = Tk()
l1=Label(root,text = error_message)
l1.grid(row=0,column=0)
quitButton = Button(root, text="To end, click here",command=quitHandler)
quitButton.grid(row=1,column=0)
mainloop()
def call_build_window() :
build_window("initial value")
build_window("Error!")
call_build_window()
【问题讨论】:
-
您应该交换一些行,以便在通过
l1.config(...访问它时存在l1(标签变量) -
我尝试将包含 l1.config 的整个“if”语句移到 mainloop() 之前,我收到了错误
UnboundLocalError: local variable 'error_message' referenced before assignment -
啊,该死的!我忘记了我将“text=”更改为“textvariable=”以查看是否有效。我应该用“text=”提交它,因为那是我在帖子中描述的代码!
-
我将它改回 text= 这样它就不会混淆未来的读者。感谢您的回复狼!