我试图将函数的结果显示在标签上,然后每次单击按钮再次更新函数。
我尝试了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'
答案 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
(如果还有其他错误,请在您的帖子中包含完整的追溯。)