Python 如何在同一标签中同时使用string和StringVar?
我目前正在尝试编写一段代码,它将根据用户按下的按钮显示一个数字,并更改标签以显示其当前数字 我目前有这段代码,它应该提供我正在尝试做的事情的想法:Python 如何在同一标签中同时使用string和StringVar?,python,tkinter,Python,Tkinter,我目前正在尝试编写一段代码,它将根据用户按下的按钮显示一个数字,并更改标签以显示其当前数字 我目前有这段代码,它应该提供我正在尝试做的事情的想法: total = 0 texttotal = StringVar() texttotal.set(total) Button(text = "-100", command = lambda: amount_calc(-100)).place(x = 70, y = 512) Button(text = "-10", command = lambda:
total = 0
texttotal = StringVar()
texttotal.set(total)
Button(text = "-100", command = lambda: amount_calc(-100)).place(x = 70, y = 512)
Button(text = "-10", command = lambda: amount_calc(-10)).place(x = 108, y = 512)
Button(text = "-1", command = lambda: amount_calc(-1)).place(x = 140, y = 512)
Button(text = "+1", command = lambda: amount_calc(1)).place(x = 166, y = 512)
Button(text = "+10", command = lambda: amount_calc(10)).place(x = 194, y = 512)
Button(text = "+100", command = lambda: amount_calc(100)).place(x = 228, y = 512)
amount_label = Label(text = "Currently adding/removing: ", textvariable = texttotal)
amount_label.place(x = 10, y = 550)
然后,“金额计算”子程序是:
def amount_calc(amount):
total += amount
texttotal.set(total)
如何更改“amount\u label”标签中的texttotal变量,同时将包含文本的字符串保留在标签中?texttotal.get()在这种情况下应该可以获得所需的输出。只需将其添加到现有字符串中即可
也许这样的事情会奏效。注意,在本例中,我将标签作为参数添加到amount_calc函数中:
total = 0
texttotal = StringVar()
texttotal.set(total)
temp = Button(text = "-100", command = lambda: amount_calc(100, amount_label))
...
amount_label = Label(text = "Currently adding/removing: " + texttotal.get())
和金额计算()
编辑:为清晰起见添加了文本并更正了错误。texttotal.get()在这种情况下应该可以获得所需的输出。只需将其添加到现有字符串中即可
也许这样的事情会奏效。注意,在本例中,我将标签作为参数添加到amount_calc函数中:
total = 0
texttotal = StringVar()
texttotal.set(total)
temp = Button(text = "-100", command = lambda: amount_calc(100, amount_label))
...
amount_label = Label(text = "Currently adding/removing: " + texttotal.get())
和金额计算()
编辑:为清晰起见添加文本并更正错误
问题:在同一个标签中同时使用string和StringVar
定义您自己的标签
,您不需要StringVar
import tkinter as tk
class TotalLabel(tk.Label):
def __init__(self, parent, pre_text, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.pre_text = pre_text
self.set(0)
def set(self, value):
self.configure(text='{} {}'.format(self.pre_text, value))
class App(tk.Tk) :
def __init__(self):
super().__init__()
total_label = TotalLabel(self, pre_text='Currently adding/removing:')
total_label.grid(row=0, column=0)
total = 10
total_label.set(total)
if __name__ == "__main__":
App().mainloop()
使用Python:3.5测试
问题:在同一个标签中同时使用string和StringVar
定义您自己的标签
,您不需要StringVar
import tkinter as tk
class TotalLabel(tk.Label):
def __init__(self, parent, pre_text, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.pre_text = pre_text
self.set(0)
def set(self, value):
self.configure(text='{} {}'.format(self.pre_text, value))
class App(tk.Tk) :
def __init__(self):
super().__init__()
total_label = TotalLabel(self, pre_text='Currently adding/removing:')
total_label.grid(row=0, column=0)
total = 10
total_label.set(total)
if __name__ == "__main__":
App().mainloop()
用Python测试:3.5texttotal需要保存要在标签中显示的整个字符串。在amount_calc
texttotal中。需要设置('Current…'+str(total))
。或者使用两个标签。texttotal需要保存要在标签中显示的整个字符串。在amount_calctexttotal中,需要设置('Current…'+str(total))
。要么这样做,要么使用两个标签。我尝试过这个方法,但是我得到一个错误,即变量“total”在赋值之前被引用,但是它被赋值为“total=0”。我不确定为什么会出现这个错误。很抱歉我回复得太晚了!您是否将其作为全局变量引用(参见我的答案,第3行)?在您最初的帖子中,您没有名为total的局部变量,因此您试图对total进行的引用超出了范围。我设法解决了这个问题,通过在“total=0”之前和子程序开始时将其设置为全局变量,使其正常工作。不确定为什么我需要做两次,但我很高兴我设法让它工作。干杯我尝试过这个,但是我得到一个错误,变量“total”在赋值之前被引用,但是它被赋值为“total=0”。我不确定为什么会出现这个错误。很抱歉我回复得太晚了!您是否将其作为全局变量引用(参见我的答案,第3行)?在您最初的帖子中,您没有名为total的局部变量,因此您试图对total进行的引用超出了范围。我设法解决了这个问题,通过在“total=0”之前和子程序开始时将其设置为全局变量,使其正常工作。不确定为什么我需要做两次,但我很高兴我设法让它工作。干杯