Python 3.x 在tkinter标签中显示对象属性

Python 3.x 在tkinter标签中显示对象属性,python-3.x,tkinter,label,Python 3.x,Tkinter,Label,我想一个标签,更新时,我按下一个按钮。标签是一个格式化字符串,用于打印对象的某些属性 这就是我试过的。它显示正确,但不会更新 from class_mnoply import * from tkinter import * Player1=Player("Hat") message=str(''' ____________________ {0} Bank account: ${1} Dice1: {2} Dice2: {3} ____________________

我想一个标签,更新时,我按下一个按钮。标签是一个格式化字符串,用于打印对象的某些属性

这就是我试过的。它显示正确,但不会更新

from class_mnoply import *
from tkinter import *

Player1=Player("Hat")
message=str('''
____________________   

{0}
Bank account: ${1}
Dice1: {2}
Dice2: {3}


____________________    
    '''.format(Player1.name, Player1.bank, Player1.dice1, Player1.dice2))



mainWin = Tk()
topFrame=Frame(mainWin)
topFrame.pack(side=TOP)
button1 Button(mainWin,text="ThrowDice",fg="red",command=Player1.rollDice())
button1.pack(side=BOTTOM)
plLabel = Label(mainWin, textvariable=message)
plLabel.pack()
mainWin.mainloop()

以下语句中有1处输入错误和1处潜在错误:

button1 Button(mainWin,text="ThrowDice",fg="red",command=Player1.rollDice())
你能猜出是什么错别字吗?如果没有,您只是缺少
=
符号

另一方面,您将
Player1.rollDice()
的返回值分配给command,但这不是您想要的。您只需将
Player1.rollDice
方法设置为按下
button1
时调用的命令。以下是正确的语法(请注意
()
)末尾的空白处):

然后,以下语句中定义了
消息

plLabel = Label(mainWin, textvariable=message)
不需要使用
StringVar
对象,但如果需要,必须首先声明它:

message = StringVar()
最后,您可以将其用作标签的
textvariable

假设您不知道什么是
lambda
,这是您尝试执行的操作示例(不使用
StringVar
变量):


看,也许我需要更清楚一些。我让它正确显示,但我想要的是,当我点击按钮时,我的“消息”的fomat选项将被更新。当我调用函数rollDice时,它会将新值设置为Player.dice1和Player.dice2。我得到了显示的初始值(1),但当调用rollDice时,它们仍然显示一个。这里:
button1按钮(mainWin,text=“ThrowDice”,fg=“red”,command=Player1.rollDice())
,删除
()
,因为您不想将
Player1.rollDice()
的返回值分配给
命令,但您只想将
Player.rollDice
method address与命令关联,而不是像我前面所说的那样,将其实际返回值关联。@user274132如果您需要的话,请查看上面的注释和编辑后的答案
message = StringVar()
from tkinter import *


def set_label_text():
    plLabel.config(text='Hello World!')

mainWin = Tk()

topFrame=Frame(mainWin)
topFrame.pack(side=TOP)
button1 =Button(mainWin,text="ThrowDice",fg="red",
                command=set_label_text) # note the absence of ()
button1.pack(side=BOTTOM)
plLabel = Label(mainWin)
plLabel.pack()

mainWin.mainloop()