2012-05-02 10 views
5

Cuando la manipulación de objetos, con PhotoImage:¿Por qué PhotoImage es lenta?

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)) 

la operación de venta lleva un tiempo muy largo. ¿Hay un método más rápido para hacer esto?

+0

Yo diría que es probablemente no sólo la 'poner()' llamada que es lento, pero el hecho de que son haciendo un ciclo anidado para (1000^2) que es muy lento. Pero @soulcheck tiene la respuesta correcta para ti. – jdi

Respuesta

4

Utilice un cuadro delimitador:

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

Tenga en cuenta que esta respuesta es antigua, pero ¿podría explicar cómo usar '" {rojo, rojo, rojo, azul, azul, azul, azul} '' como entrada de datos crea las columnas de colores? –

+0

¡Lo descubrí, gracias! En caso de que alguien más se encuentre con esto y tenga una pregunta similar [este artículo] (http://tkinter.unpythonic.net/wiki/PhotoImage) lo explica bien. –

0

Intente construir una matriz de 2d colores y llame a put con esa matriz como parámetro.

De esta manera:

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 es más eficiente (y más clara) – FabienAndre

+0

@FabienAndre aye, lo es. upvoted – soulcheck

Cuestiones relacionadas