【问题标题】:Tkinter and PIL: Changing Displayed Image via OptionMenu selectionTkinter 和 PIL:通过 OptionMenu 选择更改显示的图像
【发布时间】:2017-11-03 20:08:09
【问题描述】:

对 Tkinter 和 PIL 有点陌生,尝试设置一个 GUI,根据在 OptionMenu 中所做的选择来切换显示的图像。路径更新正常,但图像没有。有什么补救措施吗?

from tkinter import *
from PIL import Image, ImageTk
import os

def changeimage():
    path.set(cwd + '/img/' + imageVar.get() + '.png')
    img = ImageTk.PhotoImage(Image.open(path.get()))
    panel.configure(image = img)

window = Tk()
window.configure(background='grey')

imageVar = StringVar(window)
images = {'image1', 'image2', 'image3'}
imageVar.set('image1')

cwd = os.getcwd()

imageSelectMenu = OptionMenu(window, imageVar, *images)
imageSelectMenu.pack()

path = StringVar(window)
path.set(cwd + '/img/' + imageVar.get() + '.png')
img = ImageTk.PhotoImage(Image.open(path.get()))

panel = Label(window, image = img)
panel.pack()

imageVar.trace('w', changeimage)
window.mainloop()

【问题讨论】:

  • 您在第一次运行后绝对没有回调来设置img
  • 添加了回调,图像更改为空白画布而不是我想要的图像

标签: python tkinter python-imaging-library


【解决方案1】:

这是一个非常常见的错误。在 tkinter 中,您必须保留对图像对象的引用,否则它会被垃圾收集。

def changeimage():
    path.set(cwd + '/img/' + imageVar.get() + '.png')
    img = ImageTk.PhotoImage(Image.open(path.get()))
    panel.configure(image = img)
    panel.img = img # keep a reference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多