tkinter图像的操作:为什么在将图片放在画布上之前,它的运行速度要快10倍以上?

2024-05-15 02:06:01 发布

您现在位置:Python中文网/ 问答频道 /正文

在编写tkinter应用程序时,我偶然发现了以下现象。我在试验改变tk.PhotoImage对象的颜色。代码如下:对于每个像素,它选择颜色值并将其更改为黑色或白色(这无关紧要,只是一个示例)

import tkinter as tk
root = tk.Tk()

picture = tk.PhotoImage(file=r'image.png')
cnv = tk.Canvas(width=800, height=600)
cnv.pack()
cnv.create_image(0,0, anchor=tk.NW, image=picture)   # create_image here: > 35 seconds
for px in range(800):
    for py in range(600):
        color = picture.get(px,py)
        newcolor = '#ffffff' if color[0] > 128 else '#000000'
        picture.put(newcolor, (px,py))

# cnv.create_image(0,0, anchor=tk.NW, image=picture)   # create_image here: ~ 3 seconds
tk.mainloop()

当你运行这段代码时,真的,要有点耐心,在窗口最终弹出之前需要35秒(在iCore7上)。但它会的

现在,当我在更改所有颜色后创建画布图像时,代码运行速度快了10倍以上!缺少(在这两种情况下)是由put()函数引起的(该get()函数很快)

表面下发生了什么,解释了这一巨大差异

示例图片(任何800x600 PNG都可以)

sample picture


Tags: 代码pyimage示例here颜色tkintercreate

热门问题