2012-05-02 5 views
5

Когда манипулируют photoimage объектов, с:Почему 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)) 

операция пут занимает очень много времени. Есть ли более быстрый способ сделать это?

+0

Я бы сказал, что его, вероятно, не только 'ставить()' называем это медленно, но тот факт, что вы делая вложенный цикл (1000^2), который очень медленный. Но @soulcheck имеет правильный ответ для вас. – jdi

ответ

4

Используйте рамку:

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() 
+0

Поймите, что этот ответ старый, но не могли бы вы объяснить, как использовать '' {red red red red blue blue blue blue blue}? 'как вход для данных создает столбцы цветов? –

+0

Поразмыслив, спасибо! В случае, если кто-то сталкивается с этим и имеет аналогичный вопрос [эта статья] (http://tkinter.unpythonic.net/wiki/PhotoImage), это объясняет это хорошо. –

0

Попробуйте построить 2-мерный массив цветов и вызовите 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)) 
+0

noob oddy answer более эффективен (и яснее) – FabienAndre

+0

@FabienAndre aye, это так. upvoted – soulcheck

Смежные вопросы