2012-05-02 37 views
5

Khi thao tác đối tượng photoimage, với:Tại sao Photoimage lại chậm?

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

hoạt động đặt mất một thời gian rất dài. Có phương pháp làm điều này nhanh hơn không?

+0

tôi sẽ nói rằng có lẽ nó không chỉ là 'put() 'gọi đó là chậm, nhưng thực tế là bạn đang làm một vòng lặp lồng nhau (1000^2) rất chậm. Nhưng @soulcheck có câu trả lời đúng cho bạn. – jdi

Trả lời

4

Sử dụng một hộp bounding:

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

Nhận ra câu trả lời này là cũ, nhưng bạn có thể giải thích cách sử dụng '" {đỏ đỏ xanh đỏ xanh lam xanh lam xanh dương} "" làm đầu vào cho dữ liệu tạo ra các cột màu sắc? –

+0

Đã tìm ra, cảm ơn! Trong trường hợp một người khác đi qua điều này và có một câu hỏi tương tự [bài viết này] (http://tkinter.unpythonic.net/wiki/PhotoImage) giải thích nó tốt. –

0

Thử tạo mảng màu 2d và gọi put với mảng đó làm tham số.

Như thế này:

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

Câu trả lời của noob oddy hiệu quả hơn (và rõ ràng hơn) – FabienAndre

+0

@FabienAndre aye, đúng vậy. upvoted – soulcheck