在tkinter标签中显示对象属性

时间:2015-01-18 15:50:32

标签: 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}


____________________    
    '''.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 个答案:

答案 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()