为什么Photoimage放慢了?

Has*_*ant 6 python tkinter

在操作photoimage对象时,使用:

import tkinter as tk

img = tk.PhotoImage(file="myFile.gif")
for x in range(0,1000):
  for y in range(0,1000):
    img.put("{red}", (x, y))
Run Code Online (Sandbox Code Playgroud)

put操作需要很长时间.有更快的方法吗?

小智 6

使用边界框:

from Tkinter import *
root = Tk()
label = Label(root)
label.pack()
img = PhotoImage(width=300,height=300)
data = ("{red red red red blue blue blue blue}")
img.put(data, to=(20,20,280,280))
label.config(image=img)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

  • 意识到这个答案已经过时了,但是您能解释一下如何使用“{red red red red blue blue blue blue}”作为数据输入创建颜色列吗? (2认同)
  • 明白了,谢谢!如果其他人遇到这个问题并有类似的问题[这篇文章](http://tkinter.unpythonic.net/wiki/PhotoImage)很好地解释了它。 (2认同)
  • @JetBlue:遗憾的是,你的链接已失效:( (2认同)
  • @PhoemueX 这是一个[存档版本](http://web.archive.org/web/20170512214049/http://tkinter.unpythonic.net/wiki/PhotoImage) (2认同)

JCK*_*CKE 6

只需使用命令to的可选参数put()就足够了,无需创建复杂的字符串:

import tkinter as tk
root = tk.Tk()

img = tk.PhotoImage(width=1000, height=1000)
data = 'red'
img.put(data, to=(0, 0, 1000, 1000))
label = tk.Label(root, image=img).pack()

root_window.mainloop()
Run Code Online (Sandbox Code Playgroud)

进一步观察

我找不到太多有关 PhotoImage 的文档,但该to参数比标准循环更有效地缩放数据。以下是一些我认为有用的信息,但网上似乎没有正确记录。

data参数接受一串以空格分隔的颜色值,这些值要么是命名的(官方列表),要么是 8 位颜色十六进制代码。该字符串表示每个像素重复的颜色数组,其中具有多种颜色的行包含在花括号中,列仅以空格分隔。行必须具有相同的列数/颜色。

acceptable:
3 column 2 row: '{color color color} {color color color}'
1 column 2 row: 'color color', 'color {color}'
1 column 1 row: 'color', '{color}'

unacceptable:
{color color} {color}
Run Code Online (Sandbox Code Playgroud)

如果使用包含空格的命名颜色,则必须将其括在花括号中。IE。'{道奇蓝}'

下面是几个示例来说明上述操作,其中需要很长的字符串:

img = tk.PhotoImage(width=80, height=80)
data = ('{{{}{}}} '.format('{dodger blue} ' * 20, '#ff0000 ' * 20) * 20 +
        '{{{}{}}} '.format('LightGoldenrod ' * 20, 'green ' * 20) * 20)
img.put(data, to=(0, 0, 80, 80))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

data = ('{{{}{}}} '.format('{dodger blue} ' * 20, '#ff0000 ' * 10) * 20 +
        '{{{}{}}} '.format('LightGoldenrod ' * 20, 'green ' * 10) * 10)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述