You are here

Tcl 의 이미지 파일 (JPG 600KB 기준 2~3초) 읽기 느림

그동안 잘 이용하고 있었던 Tcl에 약간의 문제가 생겼습니다.
gif 파일은 용량이 커도 속도가 그렇게 느리지 않지만 JPG (600KB 기준 2~3초) 는 너무 오래 기다려야 합니다.

궁여지책으로 파이썬의 PIL의 ImageTk.Photo()로 바꾸어 사용하고 있습니다.
(정말 빠르게 이미지를 보여주더군요.)
동일한 코드인데도 뭐가 잘못 된건지...

하나의 이미지만을 보여줄때는 Tcl도 무리가 없는데 위젯 listbox로
파일 목록을 작성 후 클릭시 이미지를 위젯 label에 보여줄 때
이러한 속도 저하가 생깁니다.

아래 예문은 Tcl과 Python의 실제 사용하고 있는 코드입니다..
..너무 많은 걸 질문드려 죄송하군요..시간 있을때 천천히 살펴
보시고 꼭 답변 주지 않으셔도 됩니다..

저도 이곳 저곳 알아 보고 있습니다. 바리바리

항상 감사드립니다.

[Tcl: imageView.tcl]-------------------------------------------------

package require Tk
package require Img

## 함수정의 ##

proc ShowImage {oListBox oImg} {
 
  set imgname [$oListBox get [$oListBox curselection]]

  $oImg configure -file $imgname
}
## 리스트 ##
set names [lsort [glob *.jpg *.gif *.png]]

pack [frame .left] -side left -fill both -expand 1

grid [listbox .left.listbox -listvariable fnames
                            -yscrollcommand {.left.yscroll set}] -row 0 -column 0 -sticky news

foreach name $names {

  lappend fnames $name
}

grid [scrollbar .left.yscroll -command {.left.listbox yview}] -row 0 -column 1 -sticky ns

grid rowconfigure    .left 0 -weight 1
grid columnconfigure .left 0 -weight 1

bind .left.listbox <ButtonRelease-1> {ShowImage %W $img}

## 이미지 영역 ##

set img [image create photo]
pack    [frame .right] -fill both -expand 1
grid    [label .right.lb -image $img] -sticky news

Python: imageView.py]-----------------------------------------

from Tkinter import *
import ImageTk
import os

name=0
label=0
img=0
def ShowImage (event(&#58;
 global name, label, im, wm
 name = event.widget.get(event.widget.curselection(((
 im = ImageTk.PhotoImage(file=name(
 label.configure(image=im(
 
names = os.listdir(os.getcwd(((;
names.sort((;

wm = Tk((;
 
lb = Listbox(wm(;
lb.grid(row=0,column=0(;
for name in names&#58;
 lb.insert(END,unicode(name,"cp949"((

lb.bind('<ButtonRelease-1>',ShowImage(

yscroll = Scrollbar(wm,command=lb.yview(
lb.configure(yscrollcommand=yscroll.set(
yscroll.grid(row=0,column=1,sticky="ns"(

label = Label(wm(
label.grid(row=0,column=2(

wm.mainloop((;