Я занимаюсь фотографией с камеры и отображаю изображения на холсте Tkinter. Тем не менее, появляется странное явление, что полотно будет мигать с кодом нижеpython Tkinter Показать изображения на холсте, он всегда мигает
def get_image_cam() :
global cam,cam_flag,cam_image, cam_imageTk, canvas_img
print '[THREAD CREATE]get image camera'
print cam_flag
while cam_flag :
image = cam.get_image()
pygame.image.save(image,'capture.bmp')
cam_image = Image.open('capture.bmp')
cam_imageTk = ImageTk.PhotoImage(cam_image)
canvas_img.create_image(0, 0, anchor = NW ,image = cam_imageTk)
print '[THREAD EXIT] get image camera'
thread.exit_thread()
У меня есть поиск много, чтобы решить эту проблему. Ниже приведен код sinppets из http://codingmess.blogspot.com/2008/07/showing-webcam-image-in-desktop-window_08.html, это действительно помогает
def showimage(image):
'''Loads given image and puts it into the window'''
img = Image.open(image)
photo = ImageTk.PhotoImage(img)
container.canvas.create_image(container.width/2+2, container.height/2, image=photo)
container.obr = photo # why is this line necessary?
как автор посту высказывания, он не знал, почему это «container.obr = фото» помогает. Я сделал то же самое с моим кодом. Он изменился следующим образом:
def get_image_cam() :
global cam,cam_flag,cam_image, cam_imageTk, canvas_img
print '[THREAD CREATE]get image camera'
print cam_flag
while cam_flag :
image = cam.get_image()
pygame.image.save(image,'capture.bmp')
cam_image = Image.open('capture.bmp')
cam_imageTk = ImageTk.PhotoImage(cam_image)
canvas_img.create_image(0, 0, anchor = NW ,image = cam_imageTk)
obr = cam_imageTk # variable 'obr' is not neccessary, you can change it to anything you want
print '[THREAD EXIT] get image camera'
thread.exit_thread()
Может ли кто-нибудь помочь мне объяснить это? Заранее спасибо.
Это звучит разумно, а 'obr' не является глобальной переменной или существующим объектом *** в моей функции ***. разве он не будет удален сборщиком мусора? Или, если объект 'PhotoImage' назначен переменной, он не будет удален сборщиком мусора? –