我想要一个按下按钮时更新的标签。标签是一个格式化的字符串,用于打印对象的某些属性。
这就是我尝试过的。它显示正常但不会更新。
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()
答案 0 :(得分:0)
您在以下陈述中有1个拼写错误,并且有1个潜在错误:
button1 Button(mainWin,text="ThrowDice",fg="red",command=Player1.rollDice())
你能猜出错字是什么吗?如果不是,那么您就错过了=
标志。
另一方面,您要将Player1.rollDice()
的返回值分配给命令,但这不是您想要的。你想要的只是将Player1.rollDice
方法设置为按下button1
时调用的命令。这是正确的语法(请注意()
末尾的缺席):
button1 = Button(mainWin,text="ThrowDice",fg="red",command=Player1.rollDice)
然后,在以下语句中定义message
:
plLabel = Label(mainWin, textvariable=message)
不需要使用StringVar
对象,但如果您愿意,您首先要声明它:
message = StringVar()
最后,您可以将textvariable
用作标签。
假设您不知道lambda
是什么,这是您尝试做的一个工作示例(不使用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()