使用StringVar将函数结果显示到标签文本中?

时间:2019-10-22 10:48:38

标签: python string tkinter label

我试图将函数的结果显示在标签上,然后每次单击按钮再次更新函数。

我尝试了StringVar,但我认为我没有正确使用它,因为在尝试定义StringVar并将其设置为结果时不断出现错误。使用'textvariable'作为标签选项时,我也会收到错误消息。

from random import choice
import tkinter as tk
from tkinter import StringVar

items = ['Helm','Chest','Legs','Boots','Gloves']
droppeditem = StringVar()

def click():
    droppeditem.set(choice(items))


main = tk.Tk()
main.geometry("100x100")

button = tk.Button(main, command=click)
button.place(width=30, height=30, x=0, y=0)
label = tk.Label(main, textvariable=droppeditem)
label.place(relx=.5, rely=.5)

main.mainloop()

我希望通过将randrange通过我的列表而选择的商品以标签上的文本显示。

跟踪:

Traceback (most recent call last):
  File "C:/Users/manwe/PycharmProjects/GameStats/app.py", line 6, in <module>
    droppeditem = StringVar()
  File "C:\Users\manwe\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 480, in __init__
    Variable.__init__(self, master, value, name)
  File "C:\Users\manwe\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 317, in __init__
    self._root = master._root()
AttributeError: 'NoneType' object has no attribute '_root'

1 个答案:

答案 0 :(得分:0)

var1.set(click)

这试图使StringVar中的文本不是函数的结果,而是函数本身。

button = tk.Button(main, command=click)

当单击按钮时,它将调用click函数,但是StringVar不能通过该函数进行调整。您想在函数内部使用.set;然后要设置初始值,您可以在外面click()而不是使用.set

此外,我们还有一种更直接的方法可以从列表中随机选择:random.choice。最后,list对于列表来说是一个不好的名字,因为该名字已经在启动时分配了(您可以使用它来创建列表,或者检查是否是列表)。

所以:

from random import choice # instead of randrange
import tkinter as tk

items = ['Helm','Chest','Legs','Boots','Gloves']
var1 = StringVar() # maybe you can think of a better name for this, too? :)

def click():
    var1.set(choice(items))

click() # get a starting value

(如果还有其他错误,请在您的帖子中包含完整的追溯。)