Tkinter - 使用set_text更新文本绘图

时间:2018-01-08 06:22:02

标签: python tkinter settext

我在2D数组中有值,我使用以下行来处理它们:

t1 = [[self.ax.text(i+.2,n-.6-j,myArray[0][j][i])
        for i in range(myArray.shape[2])]
        for j in range(myArray.shape[1])]

我正在尝试使用它来更新它们:

t1.set_text(myArray[self.ref][0][0])

错误是:

AttributeError: 'list' object has no attribute 'set_text'

但是,我尝试仅更新一个值,例如:

    t1 = self.ax.text(10,10, myArray[0][0][0])

它运作得很好。
我的问题是:如何一次更新整个数组的值?通过更新我的意思是删除以前的值并绘制新的一次,这样他们就不会堆积起来。

加成

我试过应用这里提到的解决方案:
How to refresh text in Matplotlib?
并将其扩展到我的问题,仍然无法正常工作。

1 个答案:

答案 0 :(得分:1)

t1是包含许多text元素的2D列表,您可以使用

之类的内容执行相同操作
t1 = []

for j in range(myArray.shape[1]):
    sublist = []        
    for i in range(myArray.shape[2]):
       txt = self.ax.text(i+.2,n-.6-j,myArray[0][j][i])
       sublist.append(txt)
    t1.append(sublist)

所以你可以用set_text()做类似的事情来改变文字

for j in range(myArray.shape[1]):
    for i in range(myArray.shape[2]):
       t1[i][j].set_text(myArray[0][j][i])

或使用enumerate()

for j, row in enumerate(t1):
    for i, cell in enumerate(row):
       cell.set_text(myArray[0][j][i])

或使用zip()

for row, arr_row in zi(t1, myArray[0]):
    for cell, arr_cell in zip(row, arr_row):
       cell.set_text(arr_cell)
BTW:所有示例都未经过测试,因此可能需要进行一些更改。

使用t1 = self.ax.text(10,10, myArray[0][0][0]),您将列表替换为单个元素,这样您就无法访问所有元素。