изменяемое значение tkinter на холсте - PullRequest
0 голосов
/ 08 марта 2019

Я хочу изменить текстовую метку на холсте при нажатии кнопок. Я хочу увеличить метку на 10, если нажата кнопка «вверх», и уменьшить на 10, если нажата кнопка «вниз».

Это мой код, но я не знаю, что делать дальше:

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.consumtion = 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.consumtion))

        '''button'''
        self.but = tk.Button( text = "UP")
        self.but.bind("<Button-1>", lambda event: self.consumption + 10)
        self.but.place(relx=0.8, rely = 0.7, anchor = "center")
        self.but = tk.Button(text = "DOWN")
        self.but.bind("<Button-1>", lambda event: self.consumption - 10)
        self.but.place(relx=0.9, rely = 0.7, anchor = "center")

       # pack all
        self.canvas.pack()

sys=Sys()

Ответы [ 2 ]

3 голосов
/ 08 марта 2019

Вы можете использовать документированный метод itemconfigure холста, чтобы изменить любой параметр конфигурации любого объекта на холсте.

Например, вы можете написать метод с именем change_consumption, который принимает параметр дляна сколько можно изменить значение, и он может использовать itemconfigure, чтобы изменить то, что появляется на холсте:

def change_consumption(self, amount):
    self.consumption += amount
    self.canvas.itemconfigure(self.cons, text=self.consumption)

Вы бы привязали эту функцию к этой кнопке «вверх»;для «вниз» вы должны передать -10:

self.but.bind("<Button-1>", lambda event: self.change_consumption(10))
0 голосов
/ 08 марта 2019

Существует орфографическая ошибка, когда вы вызываете переменную 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...