2016-03-11 6 views
0

Я потратил неловкое количество часов на поиск способа сделать это ... Его проект, над которым я работаю, имеет более ста элементы холста, которые необходимо обновить из текстового файла. Вот простая версия:Python + Tkinter: перерисовать прямоугольник в холсте на основе некоторого значения%

Я хотел бы обновить прямоугольник, нарисованный в элементе холста, когда я нажимаю кнопку. Я нашел очень плохой способ взломать это, что связано с сумасшедшим количеством кода, но я знаю, что должен быть какой-то лучший способ.

from tkinter import * 


class MyGUI: 

def __init__(self, root): 
    frame = Frame(root) 
    frame.pack() 

    self.BoxFillPercent = 0 # the canvas items get their % fill from this value 

    self.changeButton = Button(frame, text='SB', command=self.changeRange) 
    self.changeButton.grid(row=1, column=1) 

    self.hAA = Canvas(frame, width=35, height=35, bg='light blue') 
    self.hAA.grid(row=2, column=2) 
    self.hAA.create_rectangle(0,0,self.BoxFillPercent*35,35, fill="pink") 
    self.hAA.create_text(15, 15, anchor='center', text='AA') 

def changeRange(self): 
    self.BoxFillPercent = 0.5 
    # When I push the button change the fill amount to 0.5 
    ? What do I need to add here to make this work ? 

root = Tk() 
b = MyGUI(root) 
root.mainloop() 

Я попытался использовать обновление и update_idletasks среди кучи других вещей, но я должен быть что-то отсутствую.

ответ

0

Каждый элемент на холсте имеет идентификатор. Вы можете использовать метод canvas для изменения элемента.

rect = self.hAA.create_rectangle(...) 
... 
self.hAA.itemconfig(rect, ...) 

Если вам нужно применить те же изменения к нескольким объектам, вы можете дать те объекты, общий тег, а затем использовать тег вместо ID:

rect1 = self.hAA.create_rectangle(..., tags=("special",)) 
rect2 = self.hAA.create_rectangle(..., tags=("special",)) 
... 
self.hAA.itemconfigure("special", ...) 
+0

Спасибо за быстрый ответ, вернул меня на правильный путь. Я обнаружил, что мне пришлось называть прямоугольник: self.fAA = self.hAA.create_rectangle (...), а затем использовать coords: self.hAA.coords (self.fAA, ...) ... добавлен ваш блог : D – lessharm