2012-05-02 17 views
5

Quando manipolare oggetti PhotoImage, con:Perché Photoimage è lento?

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

dell'operazione put richiede un tempo molto lungo. C'è un metodo più veloce per farlo?

+0

direi che la sua probabilmente non solo il 'messo()' chiamata in lento, ma il fatto che si è facendo un ciclo annidato per (1000^2) che è molto lento. Ma @ Soulcheck ha la risposta giusta per te. – jdi

risposta

4

Utilizzare un riquadro:

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

Realizza che questa risposta è vecchia, ma potresti spiegare come usare '" {rosso rosso rosso blu blu blu blu} "' come input per i dati crea le colonne di colori? –

+0

Capito, grazie! Nel caso in cui qualcun altro si imbatta in questo e abbia una domanda simile [questo articolo] (http://tkinter.unpythonic.net/wiki/PhotoImage) lo spiega bene. –

0

Provare a costruire un array di colori 2D e chiamare put con tale array come parametro.

Ti piace questa:

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

la risposta strana al noob è più efficiente (e più chiara) – FabienAndre

+0

@FabienAndre aye, lo è. Votato – soulcheck