Tkinterで自分用のテンプレート

ちょっとしたスクリプトでも、GUIつけとくと、
あとから便利だろうということで簡単な雛形を作成しときます。

デザインは悪いけど、まぁ、使い捨て用ってことで。。。

# -*- coding: utf-8 -*-
"""
Tkinterで簡単なGUIを作る時のひな型
シンプルに。

http://www.shido.info/py/python6.htmlにあるデモを参考にしています。
"""
import Tkinter as Tk
import tkFileDialog as Fd
import ScrolledText as S
import tkMessageBox

class MyFrame(Tk.Frame):
    def __init__(self, master=None):
        Tk.Frame.__init__(self, master)
        self.master.title('sample')

        la_top = Tk.Label(self, text=u'説明文')
        la_top.pack()

        # ファイル選択用
        f1 = Tk.Frame(self)
        la1 = Tk.Label(f1, text=u'ファイル名')
        self.entry1 = Tk.Entry(f1, width=40)
        button1 = Tk.Button(f1, text='Browse...', command=self.filedialog)
        la1.pack(side=Tk.LEFT)
        self.entry1.pack(side=Tk.LEFT)
        button1.pack(side=Tk.LEFT)
        f1.pack()

        # 設定1
        self.var_c1 = Tk.IntVar()
        self.var_c2 = Tk.IntVar()
        la_setting1 = Tk.Label(self, text=u'設定1')
        c1 = Tk.Checkbutton(self, text="check1", variable=self.var_c1)
        c2 = Tk.Checkbutton(self, text="check2", variable=self.var_c2)
        la_setting1.pack()
        c1.pack()
        c2.pack()
        # 設定2
        self.var_r1 = Tk.IntVar()
        la_setting2 = Tk.Label(self, text=u'設定2')
        r1 = Tk.Radiobutton(self, text="check1", variable=self.var_r1, value=0)
        r2 = Tk.Radiobutton(self, text="check2", variable=self.var_r1, value=1)
        la_setting2.pack()
        r1.pack()
        r2.pack()

        # テキスト
        self.txt = S.ScrolledText(self, width=40)
        self.txt.pack()

        # ボタン
        f_button = Tk.Frame(self)
        button_func = Tk.Button(f_button, text=u'なんかやる', command=self.main)
        button_help= Tk.Button(f_button, text=u'HELP', command=self.help)
        button_func.pack(side=Tk.LEFT)
        button_help.pack(side=Tk.LEFT)
        f_button.pack()

    def main(self):
        """
        メインの処理
        """
        s = "File Name: " + self.entry1.get() + "\n"
        s += "c1: %d, c2: %d\n" % (self.var_c1.get(), self.var_c2.get())
        s += "r1: %d\n" % (self.var_r1.get())
        top = Tk.Toplevel()
        t = TextFrame(top, "MAIN")
        t.set_text(s)
        t.pack()

    def help(self):
        tkMessageBox.showinfo('test', 'ヘルプだよ')

    def filedialog(self):
        # saveするときはasksavesafilename
        fname = Fd.askopenfilename(filetypes=[('All Files', ('*'))])
        if fname:
            self.entry1.delete(0, Tk.END)
            self.entry1.insert(Tk.END, fname)

class TextFrame(Tk.Frame):
    def __init__(self, master, title):
        Tk.Frame.__init__(self, master)
        self.master.title(title)

        self.txt = S.ScrolledText(self)
        self.txt.pack()

    def set_text(self, text):
        self.txt.insert(Tk.END, text)


if __name__ == '__main__':
    frame = MyFrame()
    frame.pack()
    frame.mainloop()