python - 在 Python 中打开 JPEG 图像

标签 python image jpeg

我在使用以下代码在 Python 2.7 中打开 jpeg 图像时遇到问题。

import Tkinter as tk
from PIL import ImageTk, Image

path = 'C:/Python27/chart.jpg'

root = tk.Tk()
img = ImageTk.PhotoImage(Image.open(path))
panel = tk.Label(root, image = img)
panel.pack(side = "bottom", fill = "both", expand = "yes")
root.mainloop() 

jpeg 可以正常打开,但随后代码停止运行。我想在程序中间打开 jpeg,但是一旦图像打开,其余代码都不会执行。

我还尝试使用下面的代码打开 jpeg,但只收到错误“No module named Image”。我已经安装了 PIL,它是正确的 2.7 版本。

import Image

image = Image.open('File.jpg')
image.show()

如有任何帮助,我们将不胜感激。

最佳答案

Tkinter 是单线程的。 root.mainloop 调用进入负责显示和更新所有图形元素、处理用户事件等的 GUI 循环,阻塞直到图形应用程序退出。主循环退出后,您将无法再以图形方式更新任何内容。

因此,您可能需要重新考虑程序的设计。在主循环旁边运行您自己的代码有两种选择:

选项 1:在单独的线程中运行您的代码

在进入主循环之前,生成一个将运行您自己的代码的线程。

...
def my_code(message):
   time.sleep(5)
   print "My code is running"
   print message


my_code_thread = threading.Thread(target= my_code, args=("From another thread!"))
my_code_thread.start()
root.mainloop()

选项 2:使用 Tk.after 在主循环中运行您的代码

root.after_idle(my_code) #will run my_code as soon as it can
root.mainloop()

警告 mainloop 负责所有与使 GUI 可用相关的事情。当您的代码在主循环线程中运行时(使用 root.after_idle 或 root.after 安排),GUI 将完全无响应(卡住),因此请确保您没有使用长时间运行的操作加载主循环。与选项 1 一样,在单独的线程中运行它们。

基本上,主线程必须运行主循环,并且您的代码只能使用上述方法并发运行,因此不幸的是您可能不得不重构整个程序。

关于python - 在 Python 中打开 JPEG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18690680/

相关文章:

python - 在python中同时播放多个声音

python - 从 dict 创建字典列表的更多 pythonic 方法,其中列表元素是 `{v:[k1, k2, k3]}` 形式的字典

java - 来自 Javascript 的图像 src 放置在同一个 Java 包中

python - 旋转图像而不平均像素值

Python 和 "re"

html - 如何在 RMarkdown 中将 float 图像(环绕文本)与居中标题对齐到右侧?

python - 使用 fpdf 将 jpg 添加到 pdf

ios - 当加载到 UIImageView 中时,大的 jpeg 比小的 jpeg 使用更多的内存。为什么?

python无法导入opencv因为找不到libjpeg.8.dylib

python - 在 Pandas 数据框中提取嵌套的 JSON