Python 我不能在tkinter中更新标签
我似乎无法更新我的money countervar money当其标记时,我有一个按钮,该按钮应将0.1添加到moneyNum,但money counter没有更改。我是新来的堆栈溢出,将感谢任何帮助。顺便说一句,如果它真的很混乱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
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()