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.5

texttotal需要保存要在标签中显示的整个字符串。在amount_calc
texttotal中。需要设置('Current…'+str(total))
。或者使用两个标签。texttotal需要保存要在标签中显示的整个字符串。在amount_calc
texttotal中,需要设置('Current…'+str(total))
。要么这样做,要么使用两个标签。我尝试过这个方法,但是我得到一个错误,即变量“total”在赋值之前被引用,但是它被赋值为“total=0”。我不确定为什么会出现这个错误。很抱歉我回复得太晚了!您是否将其作为全局变量引用(参见我的答案,第3行)?在您最初的帖子中,您没有名为total的局部变量,因此您试图对total进行的引用超出了范围。我设法解决了这个问题,通过在“total=0”之前和子程序开始时将其设置为全局变量,使其正常工作。不确定为什么我需要做两次,但我很高兴我设法让它工作。干杯我尝试过这个,但是我得到一个错误,变量“total”在赋值之前被引用,但是它被赋值为“total=0”。我不确定为什么会出现这个错误。很抱歉我回复得太晚了!您是否将其作为全局变量引用(参见我的答案,第3行)?在您最初的帖子中,您没有名为total的局部变量,因此您试图对total进行的引用超出了范围。我设法解决了这个问题,通过在“total=0”之前和子程序开始时将其设置为全局变量,使其正常工作。不确定为什么我需要做两次,但我很高兴我设法让它工作。干杯