今日作成したのは簡易イメージビューア。gifしか見れないようだ。

#!/usr/bin/env python

import Tkinter
import tkFileDialog

class ImageViewer:
    def openFile(self):
        if self.photo:
            self.canvas.delete(self.photo)
        self.photoImage = Tkinter.PhotoImage(file=tkFileDialog.askopenfilename())
        self.canvas.config(width=self.photoImage.width(),height=self.photoImage.height())
        self.photo = self.canvas.create_image(0,0,anchor=Tkinter.NW,image=self.photoImage)
    def __init__(self):
        self.window = Tkinter.Tk()
        self.photo = None
        self.canvas = Tkinter.Canvas(self.window, bg="white",
                                     width=100,
                                     height=100)
        self.canvas.pack()
        self.btnOpenFile = Tkinter.Button(self.window,text="open",command=self.openFile)
        self.btnOpenFile.pack()

        self.window.mainloop()

ImageViewer()

画像データはPython/TkinterではPhotoImageというクラスで、 そのコンストラクタで読む画像ファイルを指定しますが、 そのPhotoImageのインスタンスは必ずインスタンス変数(selfがついたの) に保持しないと表示に出てきてくれません。

ここにハマった。関数ローカルの変数に入れると表示されないのな。