如何打印 Tkinter 变量作为字符串的一部分?
How to print Tkinter variables as part of a string?
在常规 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"
。
我应该怎么做?
When I press it, the printed value remains "I have 14 items" instead of changing to "I have 15 items" as it should.
不,不应该。您将按钮的文本定义为带有 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()
在常规 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"
。
我应该怎么做?
When I press it, the printed value remains "I have 14 items" instead of changing to "I have 15 items" as it should.
不,不应该。您将按钮的文本定义为带有 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()