程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Tkinter 与图像

发布于2024-11-23 21:26     阅读(655)     评论(0)     点赞(12)     收藏(3)


使用以下代码,我无法在 tkinter 单元格中显示图像:

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

root = Tk()
root.geometry=("1000x1000")

def orig():
    orig_image = filedialog.askopenfilename(filetypes=[("Image file", "*.jpg"), ("All files", "*.")])
    my_img = ImageTk.PhotoImage(Image.open(orig_image))
    lbl = Label(image=my_img)
    lbl.grid(row=0, column=0)


orig()

root.mainloop()

但是,通过将其从方法中取出,它就可以正常工作:

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

root = Tk()
root.geometry=("1000x1000")

orig_image = filedialog.askopenfilename(filetypes=[("Image file", "*.jpg"), ("All files", "*.")])
my_img = ImageTk.PhotoImage(Image.open(orig_image))
lbl = Label(image=my_img)
lbl.grid(row=0, column=0)

root.mainloop()

我错过了什么?

这是一个更大项目的一部分,我想显示“原始” OCR 扫描图像,然后使用其他方法在原始图像旁边(在另一列中)显示“校正后的图像”,以显示该校正是否有所改善。


解决方案


您的代码存在一些问题

  • 不幸的是,几何方法分配不正确。应该调用它而不是分配它。

  • 对于第一个代码块,您定义了函数 orig() 但让它保持未求值状态。

  • 需要将 PhotoImage 对象作为属性保留,以防止其在垃圾收集中丢失。

尝试这个方法:

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

root = Tk()
root.geometry("1000x1000")  # Corrected: called as a method

def orig():
    global my_img  # Important: keep a reference to prevent garbage collection
    orig_image = filedialog.askopenfilename(filetypes=[("Image file", "*.jpg"), ("All files", "*.*")])
    img = Image.open(orig_image)
    my_img = ImageTk.PhotoImage(img)
    lbl = Label(root, image=my_img)
    lbl.grid(row=0, column=0)

orig()  # Call the function to open file dialog and display image
root.mainloop()


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/2045460/ab6c720de01813bac4ed/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

12 0
收藏该文
已收藏

评论内容:(最多支持255个字符)