В настоящее время я пытаюсь настроить GUI в Tkinter, чтобы показать последовательность изображений (с именем file01.jpg, file02.jpg и т. Д.). В настоящее время я делаю это путем создания объекта Sequence для управления списком изображений, которые я забочусь о:Анализ последовательности изображений с использованием PIL/Tkinter
class Sequence:
def __init__(self,filename,extension):
self.fileList = []
#takes the current directory
listing = os.listdir(os.getcwd())
#and makes a list of all items in that directory that contains the filename and extension
for item in listing:
if filename and extension in item:
self.fileList.append(item)
#and then sorts them into order
self.fileList.sort()
print self.fileList
def nextImage(self):
#returns a string with the name of the next image
return self.fileList.pop(0)
И тогда я использую довольно простой Tkinter сценарий, я нашел в Интернете, чтобы создать окно и разместить изображение есть:
window = Tkinter.Tk()
window.title('Image Analysis!')
sequence = Sequence('test','jpg')
image = Image.open("test01.jpg")
image = image.convert('L')
imPix = image.load()
canvas = Tkinter.Canvas(window, width=image.size[0], height=image.size[1])
canvas.pack()
image_tk = ImageTk.PhotoImage(image)
canvas.create_image(image.size[0]//2, image.size[1]//2, image=image_tk)
window.bind("<space>", lambda e: nextFrame(sequence_object=sequence,event=e))
Tkinter.mainloop()
где nextFrame определяется как:
def nextFrame(sequence_object,event=None):
nextImage = sequence_object.nextImage()
print 'Next Image is: ',nextImage
image = Image.open(nextImage)
image = image.convert('L')
imPix = image.load()
image_tk = ImageTk.PhotoImage(image)
canvas.create_image(image.size[0]//2, image.size[1]//2, image=image_tk)
canvas.update()
В моем питона буфере я вижу правильную последовательность изображений всплывал ('Next изображение: test02, JPG' и т.д.), но новый им возраст никогда не всплывает!
У кого-нибудь есть объяснения, почему изображение не появляется?
Спасибо!
Nathan lachenmyer
Похоже, вы правы! Простой 'global image_tk' внутри nextFrame() исправил его. –
@asymptoticdesign: везде, где вы создаете переменную для хранения изображения, убедитесь, что переменная не является локальной. –