【问题标题】:python, function that shows image in tkinter?python,在tkinter中显示图像的函数?
【发布时间】:2016-04-04 17:32:28
【问题描述】:

我想创建一个 tkinter 窗口并显示 lena 图片。我得到了一个可以工作的代码,但我不知道如何从中创建一个函数。

代码:

import numpy
import cv2
from Tkinter import *
from PIL import Image, ImageTk
import scipy.misc

#create root window
root = Tk()
root.geometry("600x600")

#path to lena picture
lena = "C:\lena.jpg"

##------------this as function----------------------------
#convert lena.jpg into tkinter photo image
image = Image.open(lena)
photo = ImageTk.PhotoImage(image)

#create canvas to display picture
w = Canvas(root)
w.create_image(0, 0, image = photo, anchor = "nw")
w.pack(fill = BOTH, expand = YES)
##-------end:-this as function----------------------------


#start root window
root.mainloop()

我试过这个功能,但是没有打开lena图片...:

#create root window
root = Tk()
root.geometry("600x600")

#path to lena picture
lena = "C:\lena.jpg"


def imgShow(img):
    ##------------this as function----------------------------
    #convert lena.jpg into tkinter photo image
    image = Image.open(img)
    photo = ImageTk.PhotoImage(image)

    #create canvas to display picture
    w = Canvas(root)
    w.create_image(0, 0, image = photo, anchor = "nw")
    w.pack(fill = BOTH, expand = YES)
    ##-------end:-this as function----------------------------

##use function with lena image path.
## doesnt work: window pops up but lena image is not shown
imgShow(lena)

#start root window
root.mainloop()

## ErrorMessages?: No Error Message 

你知道我做错了什么吗?

【问题讨论】:

  • 我们需要的不仅仅是不工作。你有错误吗?如果是这样,包括它。如果没有,它在做什么?
  • 你说得对,“不工作”是不够的。我把它改成
  • 不起作用:弹出窗口但不显示 lena 图片

标签: python function tkinter


【解决方案1】:

PhotoImage 分配给函数中的局部变量存在众所周知的问题。 Garbage Collector 离开功能时删除图像,但您可以将photo(例如)分配给w,如下所示:

photo = ImageTk.PhotoImage(image)

w = Canvas(root)
w.photo = photo # assign photo to object.

【讨论】:

  • 非常感谢!我不知道垃圾收集器会删除图像。我学到的另一件事,谢谢!!!
【解决方案2】:

原因是关于local 变量,所以photowimgShow 的局部变量。一种解决方法是返回对您的 photo 的引用:

def imgShow(img):
    ##------------this as function----------------------------
    #convert lena.jpg into tkinter photo image
    image = Image.open(img)
    photo = ImageTk.PhotoImage(image)
    return photo

    #create canvas to display picture
w = Canvas(root)
pic = imgShow(lena)
w.create_image(0, 0, image = pic, anchor = "nw")
w.pack(fill = BOTH, expand = YES)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    相关资源
    最近更新 更多