HOME | A-2. Tkinter での日本語の取り扱い | Python | download | 書き込む |
Tkinter は名前が示すように Tcl/Tk の wrapper です。Tcl/Tk は OS に依存しない GUI の草分けで、 広く普及しています。他の GUI に手を広げるにしても Tk は押さえておいた方が良いと思います。 さて、Tcl/Tk をダウンロードすると、リファレンス、デモスクリプトが同封されており、また、 Web 上にも解説記事がたくさんあります。それに比べると Tkinter の方は解説記事、デモスクリプト の量が少ないように見受けられます。特にデモスクリプトはほとんど見当たりません。
それならば、Tcl/Tk を使えばいいと思われるかもしれません。しかし、Tk は便利ですが、それを制御する言語の Tcl には紫藤はなじめません。たぶん、そう感じる人が多いので、Tk は Perl, Python, Ruby, scheme などの人気のある 言語に移植されています。
Tkinter をつくった人は Tk のマニュアルがあれば Tkinter は使えると思っていたのか、 マニュアル類は出回っていませんでした。しかし、実際にスクリプトを書いてみるとわかると思いますが、 Tkinter は Tcl/Tk とかなり違い、それなりのリファレンスがないとプログラムを書くことができません。
ようやく最近、Tkinter のマニュアルが充実してきて 本も出版されました。 Python-Tk によるプログラミングはだんだんとやりやすくなっています。
一方、サンプルコードは Web 上を探してもほとんど見当たりませんでした。 そこで、自身の勉強をかねて、Tcl/Tk に付属してくるデモを Tkinter に翻訳してみました。 翻訳は、なるべくオリジナルのデモと同じ widget ができるようにしました。 この翻訳作業は結構楽しく、また、Tcl/Tk より Tkinter の方がすっきりとプログラムが書けると感じました。 オブジェクト指向は GUI を書くとき大変有効です。
皆様が Python-Tk のプログラムを書くとき、参考にしていただければ幸いです。
>python menu.pyと打ち込めば、menu.py が起動します。
01: #! /usr/bin/env python 02: 03: """ 04: button.py 05: 06: This demonstration script creates a toplevel window containing 07: several button widgets. 08: 09: June 14, 2005 10: """ 11: 12: 13: import Tkinter as Tk 14: import template as A 15: 16: 17: class Button(Tk.Button): 18: """ Buttons to change bg of frames """ 19: def __init__(self, master, obj, color_name, color_id): 20: Tk.Button.__init__(self, master, text=color_name, width=15, command=self.command) 21: self.obj = obj 22: self.color_id = color_id 23: 24: def command(self): 25: self.obj.demo_frame.config(bg=self.color_id) 26: self.obj.demo_buttons.config(bg=self.color_id) 27: 28: 29: class Demo(A.Demo): 30: """a demo class """ 31: 32: def __init__(self, cmain): 33: A.Demo.__init__(self, cmain, __file__) 34: self.ini_frame() 35: 36: def ini_demo_called(self): 37: """ This method should be defined""" 38: self.ini_demo_called_0() 39: self.ini_frame() 40: 41: def ini_frame(self): 42: self.demo_main_frame.master.title("Button Demonstration") 43: self.demo_main_frame.master.geometry('+50+50') 44: A.Label(self.demo_main_frame, text= 45: "If you click on any of the four buttons below, " 46: "the background of the button area will change to the color indicated in the button." 47: , width=35, wraplength='8c') 48: for name, code in [('Deeppink', '#FF1493'), ('Cornflowerblue', '#6495ED'), 49: ('Springgreen', '#00FF7F'), ('Gold', '#FFD700')]: 50: b = Button(self.demo_frame, self, name, code) 51: b.pack(padx=10, pady=5) 52: 53: 54: ##------------------------------------------------ 55: def demo(*av): 56: """ function called by `index.py'""" 57: d = Demo(False) 58: d.demo_window.focus_set() 59: 60: if __name__ == '__main__': 61: d = Demo(True) 62: d.demo_main_frame.mainloop()手順は以下の通りです。
01: class Frame(Tk.Frame): 02: def __init__(self, master=None): 03: Tk.Frame.__init__(self, master) 04: self.demo_frame = Tk.Frame(self) 05: self.demo_frame.pack(side=Tk.BOTTOM, fill=Tk.BOTH, expand=1) 06: #もし、スクリプト中に self.demo_buttons が現れるようなら、次の2行も追加します。 07: # self.demo_buttons = Tk.Frame(self.demo_frame) 08: # self.demo_buttons.pack(Tk.BOTTOM)
01: label=Tk.Label(self, text= 02: "If you click on any of the four buttons below, " 03: "the background of the button area will change to the color indicated in the button." 04: , width=35, wraplength='8c', font=('Helvetica', '14'), justify=Tk.LEFT) 05: label.pack()
01: if __name__ == '__main__': 02: a = Frame() 03: a.pack() 04: a.mainloop()
HOME | A-2. Tkinter での日本語の取り扱い | Python | download | 書き込む |