Python + Tkinter:基于某些%值重绘画布中的矩形

时间:2016-03-11 08:09:18

标签: python user-interface tkinter tkinter-canvas

我花费了大量的时间来寻找一种方法来实现这一目标......对于我正在研究的项目,它有超过一百个需要从文本文件更新的画布项目。这是一个简单的版本:

当我按下按钮时,我想更新画布项目中绘制的矩形。我发现了一个真正糟糕的黑客方法,它涉及到大量的代码,但我知道有是一些更好的方式。

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和update_idletasks但我必须遗漏一些东西。

1 个答案:

答案 0 :(得分:0)

画布上的每个项目都有一个id。您可以使用画布的itemconfig方法更改项目。

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", ...)