操作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))
put操作需要很长时间。有没有更快的方法呢?
答案 0 :(得分: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()
答案 1 :(得分:3)
仅使用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()
我找不到关于PhotoImage的文档资料,但是to
参数比标准循环更有效地缩放数据。以下是一些我认为会有所帮助的信息,这些信息似乎在网上没有得到适当的记录。
data
参数采用一串用空格分隔的颜色值,这些颜色值名为(official list)或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}
如果使用包含空格的命名颜色,则必须将其用花括号括起来。即。 '{道奇蓝}'
以下是一些示例,用于说明上述操作,其中将需要一个长字符串:
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))
data = ('{{{}{}}} '.format('{dodger blue} ' * 20, '#ff0000 ' * 10) * 20 +
'{{{}{}}} '.format('LightGoldenrod ' * 20, 'green ' * 10) * 10)
答案 2 :(得分:0)
尝试构建一个2d颜色数组,并以该数组作为参数调用put
。
像这样:
import tkinter as tk
img = tk.PhotoImage(file="myFile.gif")
# "#%02x%02x%02x" % (255,0,0) means 'red'
line = '{' + ' '.join(["#%02x%02x%02x" % (255,0,0)] * 1000) + '}'
img.put(' '.join([line] * 1000))