Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我不能在tkinter中更新标签_Python_Python 3.x_Tkinter - Fatal编程技术网

Python 我不能在tkinter中更新标签

Python 我不能在tkinter中更新标签,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我似乎无法更新我的money countervar money当其标记时,我有一个按钮,该按钮应将0.1添加到moneyNum,但money counter没有更改。我是新来的堆栈溢出,将感谢任何帮助。顺便说一句,如果它真的很混乱 from tkinter import * import random from time import sleep root = Tk() root.geometry('320x320') #spacing spacingTitle = Label(root, t

我似乎无法更新我的money countervar money当其标记时,我有一个按钮,该按钮应将0.1添加到moneyNum,但money counter没有更改。我是新来的堆栈溢出,将感谢任何帮助。顺便说一句,如果它真的很混乱

from tkinter import *
import random
from time import sleep
root = Tk()
root.geometry('320x320')

#spacing
spacingTitle = Label(root, text=" \n\n\n\n\n\n\n\n\n")



#title
title = Label(root, text="                        \bGamblers Dream\b", font="Helvetica", fg="red")
titleWelcom = Label(root, text="                        Welcom to...")
titleWelcom.grid()
title.grid()


#money counter
moneyNum = float(10.0)
money = Label(root, text="money:" + str(moneyNum), font="Helvetica")
money.grid(row=3, column=0)

#moneyClicker
def moneyButtonAdder():
    global moneyNum
    moneyNum = moneyNum + 0.1
moneyClicker = Button(root, text="click", fg="green", command=moneyButtonAdder)
moneyClicker.grid(row=14)


root.mainloop()

问题是,一旦创建标签,就会将字符串传递给它。标签显示字符串,并且:

更改字符串对象不会更改标签文本 更改整数不会更改字符串-创建新字符串对象时,它会丢失整个连接 所以,一切都不像你希望的那样程序化。 解决方案-使用StringVar对象并检测值更改-请参阅。 因此,解决方案是:
希望对你有帮助

这回答了你的问题吗?仅更新moneyNum不会更新货币标签。添加money.configtext=money:+strmoneyNum更新moneyNum后。
from tkinter import *

class Observed(object):
    """adapted copy from https://stackoverflow.com/a/6192298/10713244"""
    def __init__(self):
        self._observed = 10.0
        self._observers = []

    @property
    def observed(self):
        return self._observed

    @observed.setter
    def observed(self, value):
        self._observed = value
        for callback in self._observers:
            print('announcing change')
            callback(self._observed)

    def bind_to(self, callback):
        print('bound')
        self._observers.append(callback)


class Observer(object):
    def __init__(self, data):
        self.text = ''
        self.data = data
        self.data.bind_to(self.update)

        self.tkinter_init()
    def update(self, observed):
        self.text = 'float: '+str(data._observed)

        self.tkinter_update()

    def tkinter_init(self):
        self.tk = Tk()
        self.tvar = StringVar()
        self.label = Label(textvariable=self.tvar)
        self.label.pack()
    def tkinter_update(self):
        self.tvar.set(self.text)


if __name__ == '__main__':
    data = Observed()
    label = Observer(data)
    print(label.text)
    data.observed = 10.0
    print(label.text)

    def dec(): data.observed -= 0.1
    Button(label.tk, text='decrease', command=dec).pack()

    label.tk.mainloop()