目标:
我有两个脚本,一个用于tkinter gui,另一个在按下tkinter按钮时运行,可生成多个图像。 创建图像后,我想在运行时更新tkinter图像画布。
预期结果:
tkinter画布图像应在GraphGen.run()中for循环的每次迭代中更新
实际结果:
最初的画布图像消失了,没有显示其他图像。
到目前为止我尝试过的事情:
我发现我需要使用.itemconfig(...),但仍未更新。立即使用.pack()没有区别。 你能告诉我一些好的方法吗?对我来说,传递画布对象已经很麻烦。
tkinter gui类的代码:
class Gui:
def __init__(self):
self.root = Tk()
self.root.geometry("1280x720")
self.button = None
self.gg = GraphGen()
self.canvas = None
self.img_on_canvas = None
def build_gui(self):
self.canvas = Canvas(self.root, width=600, height=500)
self.canvas.pack()
self.canvas.place(x=500, y=100)
img = PhotoImage(file="1.png")
self.img_on_canvas = self.canvas.create_image(1, 1, image=img, anchor='nw')
self.button = Button(self.root, width=20, height=20, text='PRESS', command=self.button_function)
self.button.place(x=100, y=100)
self.root.mainloop()
def button_function(self):
self.gg.run(self.canvas, self.img_on_canvas)
生成脚本的代码:
class GraphGen:
def __init__(self):
self.x = np.arange(0, 10)
self.y = None
def run(self, image_canvas, image_on_canvas):
for i in np.arange(1, 6):
self.y = [np.sqrt(i*xc) / np.exp(i*xc - 1) for xc in self.x]
plt.figure()
plt.ylim(0, 1)
plt.xlim(0, 10)
plt.plot(self.x, self.y)
plt.savefig(f"{i}.png")
if image_canvas is not None:
img = PhotoImage(file=f"{i}.png")
image_canvas.itemconfig(image_on_canvas, image=img)
image_canvas.pack()
else:
plt.show()
编辑:
我已经有一个文件“ 1.png”开始。