这是我的问题here的一个插件,我也读过this,但我不知道全局变量是否与我的问题完全匹配。
我喜欢Marcin在我的旧线程中提出的解决方案很多,但是我确实包含了线程选项,因为我有时会在该画布中调用需要大量时间(分钟......)的函数而且我被告知这应该当画布中的这些功能需要花费很多时间时才能完成......
所以这是我目前的代码:
class MyTkApp(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
self.root=tkinter.Tk()
self.s = StringVar()
self.s.set('Foo')
self.path = StringVar()
self.path.set('1.jpg')
canvas = Canvas(self.root, width=300, height=300)
canvas.pack()
im = Image.open(self.path.get())
canvas.image = ImageTk.PhotoImage(im)
l = tkinter.Label(self.root,textvariable=self.s)
l.pack()
self.root.mainloop()
app = MyTkApp()
app.start()
当我运行它时,一切正常,直到我包括:
app.s.set('test') # <--- works
app.path.set('2.jpg') # <--- does nothing :(
所以我看到第一张图片,我也可以更新标签,但我从未看过新图片。这可能是因为垃圾收集首先到达它:(
所以...我可以只定义变量global吗?那种感觉......不对。你会建议什么?我希望尽可能贴近我的解决方案,因为围绕它的其他代码已经运行得很好 - 但如果有充分理由不这样做,我总是愿意接受一个好的建议。