如何在按下按钮时更改Tkinter标签文本

4

我有这段代码,它的作用是在物品按钮被按下时更改Instruction标签的文本。由于某种原因,它并没有生效,并且我不完全确定原因。我尝试在press()函数中创建另一个按钮,名称和参数相同,但文本不同。

import tkinter
import Theme
import Info

Tk = tkinter.Tk()
message = 'Not pressed.'

#Sets window Options
Tk.wm_title(Info.Title)
Tk.resizable(width='FALSE', height='FALSE')
Tk.wm_geometry("%dx%d%+d%+d" % (720, 480, 0, 0))


#Method run by item button
def press():
    message = 'Button Pressed'
    Tk.update()

#item button
item = tkinter.Button(Tk, command=press).pack()

#label
Instruction = tkinter.Label(Tk, text=message, bg=Theme.GUI_hl2, font='size, 20').pack()

#Background
Tk.configure(background=Theme.GUI_bg)
Tk.mainloop()
2个回答

13

正在进行:

message = 'Button Pressed'

不会影响标签小部件。它只会将全局变量message重新分配一个新值。

要更改标签文本,您可以使用其{{link1:.config()方法}}(也称为.configure()):

def press():
    Instruction.config(text='Button Pressed')

此外,在创建标签时,您需要在单独的一行上调用pack方法:
Instruction = tkinter.Label(Tk, text=message, font='size, 20')
Instruction.pack()

否则,Instruction 将被赋值为 None,因为这是该方法的返回值。

属性错误:'NoneType'对象没有属性'config'。 - Phoenix
你看到我的修改了吗?我添加了一句话,你还需要重新定位调用 pack 的位置,因为该方法返回 None。点击这里获取更多信息。 - user2555451

2

您可以将 message 设为 StringVar,以便进行回调。

message = tkinter.StringVar()

message.set('Not pressed.')

你需要将message设置为textvariable,以便于Instruction使用:

Instruction = tkinter.Label(Tk, textvariable=message, font='size, 20').pack()

然后,继续进行操作。

def press():
    message.set('Button Pressed')

PY_VAR0已经取代了“按钮未按下”和“按钮已按下”的文本,看起来是这样。 - Phoenix
@Phoenix 不理解你的评论。 - fdsa
当我运行我的程序时,它显示“PY_VAR0”,而不是在按下按钮后应显示的“Button Pressed”,或在未按下按钮时应显示的“Not Pressed”。 - Phoenix
1
AttributeError: 'NoneType' object has no attribute '_root' - Pyd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接