【问题标题】:Display objects attributes in tkinter label在 tkinter 标签中显示对象属性
【发布时间】:2015-01-18 15:50:31
【问题描述】:

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

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

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

【问题讨论】:

标签: python-3.x tkinter label


【解决方案1】:

您在以下语句中有 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()

【讨论】:

  • 也许我需要更清楚一点。我让它正确显示,但我想要的是当我单击按钮时更新“消息”的格式选项。当我调用函数 rollDice 时,它​​会为 Player.dice1 和 Player.dice2 设置新值。我显示了初始值 (1),但是当调用 rollDice 时,它​​们仍然显示一个。
  • 这里:button1 Button(mainWin,text="ThrowDice",fg="red",command=Player1.rollDice()),去掉(),因为你不想把Player1.rollDice()的返回值赋值给command,而只想把Player.rollDice方法地址关联到命令,而不是它的返回值,正如我之前所说的。
  • @user274132 如果你想要的话,请查看我上面的评论和我编辑的答案
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多