Существует орфографическая ошибка, когда вы вызываете переменную self.consumtion
, но когда вы пытаетесь изменить ее, она называется self.consumption
.
Текстовые объекты на холсте работают не так, как обычные надписи, а больше похожи на текстовые виджеты, отслеживая выборки и методы выделения, удаления и вставки.Я создал функцию для изменения текста и затем позволил кнопкам вызывать эту функцию с нужным смещением:
import tkinter as tk
class Sys(tk.Tk, object):
def __init__(self):
super(Sys, self).__init__()
self.title('SYSTEM')
self.geometry('{0}x{1}'.format(500, 500)) # dimentions
self.consumption = 300
self._build_system()
def _build_system(self):
self.canvas = tk.Canvas(self, bg='lightgreen', height=500, width=500) # dimentions
'''changeable value'''
self.cons = self.canvas.create_text(250,250, text = str(self.consumption))
'''button'''
self.but = tk.Button( text = "UP")
# Call on function change_label with amount = 10
self.but.bind("<Button-1>", lambda event: self.change_label(10))
self.but.place(relx=0.8, rely = 0.7, anchor = "center")
self.but = tk.Button(text = "DOWN")
# Call on function change_label with amount = -10
self.but.bind("<Button-1>", lambda event: self.change_label(-10))
self.but.place(relx=0.9, rely = 0.7, anchor = "center")
# pack all
self.canvas.pack()
def change_label(self, amount):
# Adjust self.consumption with amount
self.consumption += amount
# Delete all chars in self.cons
self.canvas.dchars(self.cons, 0, tk.END)
# Insetr new text in self.cons
self.canvas.insert(self.cons, 0, str(self.consumption))
sys = Sys()
Посмотрите на Редактирование текстовых элементов Canvas