在常规Python 3.4中,如果要在字符串中间打印变量,请执行以下操作:
x = 31
print("The value of x is %s" % (x))
它将打印The value of x is 31
。
在Tkinter中,如果要让标签读取某个变量,则只需定义标签,并且在任何时候标签的变量发生更改,如果它是Tkinter标签,则标签会自动更新。例如:
var = StringVar()
var.set("Label")
label = Label(main, text=var)
但是,如果我希望在Tkinter中将字符串的一部分作为变量...
items = IntVar()
items.set(14)
b = Button(main, text="I have %s items" % (items.get()), command=additem)
def additem():
items.set(items.get() + 1)
...按钮没有更新。当我按它时,打印的值保持不变,"I have 14 items"
而不是更改"I have 15 items"
为应有的值。
我应该怎么做呢?
当我按它时,打印的值将保持为“我有14个项目”,而不是应更改为“我有15个项目”。
不,不应该。您将按钮的文本定义为带有当时编号的字符串items
。您无处告诉文字要更新。在text
和textvariable
属性做完全不同的事情,text
设置文本不更新,textvariable
需要一个StringVar
或其他Tkinter的变量,并保持更新,这个变量的内容的文本。因此也请注意,您的第一个示例是错误的,您必须使用textvariable
那里的属性将StringVar
的内容绑定到按钮,而不是text
。
我认为最好的解决方案是不使用IntVar
,只需使用configure
以下命令手动更新文本即可:
root = Tk()
def additem():
global items
items += 1
b.configure(text="I have %s items" % (items))
items = 14
b = Button(root, text="I have %s items" % (items), command=additem)
b.pack()
root.mainloop()
另一种选择是将标签分成三个标签,然后将它们放在一起,如:
root = Tk()
def additem():
items.set(items.get() + 1)
f = Frame(root)
items = IntVar()
items.set(14)
l0 = Label(f, text="I have")
l1 = Label(f, textvariable=items)
l2 = Label(f, text="items")
b = Button(root, text="Add item", command=additem)
l0.pack(side=LEFT)
l1.pack(side=LEFT)
l2.pack(side=LEFT)
f.pack()
b.pack()
root.mainloop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句