我在tkinter环境中设置文件名时遇到问题(覆盆子上的python 3.2)。为了说明我的意思,我将使用我的代码:
from tkinter import Tk, Canvas, StringVar
from PIL import ImageTk, Image
from threading import Thread
class proc(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
self.root=tkinter.Tk()
self.labelstring = StringVar()
self.labelstring.set('Foo')
self.path = StringVar()
self.path.set('cold.jpg')
canvas = Canvas(self.root, width=888, height=600)
canvas.pack()
im = Image.open(self.path) #<-- does not work
canvas.image = ImageTk.PhotoImage(im)
canvas.create_image(0, 0, image=canvas.image, anchor='nw')
label = tkinter.Label(self.root,textvariable=self.labelstring)
label.pack()
self.root.mainloop()
app = proc()
app.start()
for i in range(0, 10):
time.sleep(5)
proc.labelstring.set(i)
我更改标签labelstring.set(i)
的部分工作正常,但不起作用的是通过path.set('image.jpg')
发送文件名。我知道,文件类型不是这样的路径,它是一个tkinter.StringVar对象......我没有找到一个很好的方法使它成为一个路径变量。
在一天结束时
im = Image.open(self.path)
canvas.image = ImageTk.PhotoImage(im)
canvas.create_image(0, 0, image=canvas.image, anchor='nw')
无法使用先前定义的self.path.set('image.jpg')
调用。我想要一个xy图片列表,然后path.set(piclist[i])
更改tkinter.canvas中的图像。
答案 0 :(得分:0)
我不知道你想要实现什么,以及为什么在这里使用Threads。你的代码有一些不一致,缺少import语句等。因此,我简化了它,以便我可以运行它,只关注你指定的行。简化版本是:
from tkinter import Tk, Canvas, StringVar, Label
from PIL import ImageTk, Image
from threading import Thread
class proc():
def __init__(self):
pass
# Thread.__init__(self)
def run(self):
self.root=Tk()
self.labelstring = StringVar()
self.labelstring.set('Foo')
self.path = StringVar()
self.path.set('empty.gif')
canvas = Canvas(self.root, width=888, height=600)
canvas.pack()
im = Image.open(self.path.get()) #<-- does not work
canvas.image = ImageTk.PhotoImage(im)
canvas.create_image(0, 0, image=canvas.image, anchor='nw')
label = Label(self.root,textvariable=self.labelstring)
label.pack()
self.root.mainloop()
app = proc()
app.run()
专注于不起作用的行,在你的例子中你有:
im = Image.open(self.path)
但你应该按照以下方式获取文件的路径(如我的例子所示):
im = Image.open(self.path.get())