
| ■ | メインウィジェットのテンプレートを作ろう |
#
# u4.py (ネーミングに特に意味はないですが、
# このu4がモジュール名となります)
#
from Tkinter import *
from tkFont import *
from tkMessageBox import *
# Tkウィジェットのテンプレートです。
class U4Widget(Frame):
def quit(self):
self.master.destroy()
# ネイティブ文字コードで書かれた文字列strをUTF-8に変換して返します。
def j(self, str, encoding="japanese.euc_jp"):
u = unicode(str, encoding)
return u.encode("utf8")
# これをオーバーライドしてウィジェットの初期化処理を書きます。
def init(self):
pass # please override this
# コンストラクタ
def __init__(self, title="untitled", autoloop=1, master=None):
Frame.__init__(self, master)
self.init()
self.pack()
self.master.title(title)
# autoloopが真の場合、自動的にイベントループに入ります。
if autoloop: self.mainloop()
# end.
|
from u4 import *
class A(U4Widget):
def init(self):
la = Label(self, text="Hello, World.", fg="#600000")
b = Button(self, text=self.j("終了"), command=self.quit)
for e in (la, b):
e.pack(side=TOP, pady=5)
a = A("Sample")
# end.
|
おお、なンて簡単なンだッ(勝手に言えや)
| ■ | チェックボタンとラジオボタン |
from u4 import *
class A(U4Widget):
def init(self):
font = Font(family="Times", size=14)
la = Label(self, text=self.j("おやつにしますか:"), font=font)
fr = Frame(self, relief=GROOVE, bd=2)
self.fruitsVar = StringVar()
self.bananaVar = IntVar()
ra = { }
for e in ("りんご", "メロン", "もも"):
ra[e] = Radiobutton(fr, text=self.j(e), variable=self.fruitsVar, value=e)
ra[e].pack(side=TOP, anchor=W)
c = Checkbutton(self, text=self.j("バナナはおやつに含まない"),
variable=self.bananaVar, onvalue=1, offvalue=0)
b = Button(self, text="OK", command=self.ok)
la.pack(side=TOP, pady=5)
fr.pack(side=TOP, pady=5, padx=10, anchor=W)
c.pack(side=TOP, pady=5, padx=20)
b.pack(side=TOP, pady=5, padx=20, anchor=E)
self.bananaVar.set(1)
self.fruitsVar.set("メロン")
def ok(self):
a = self.fruitsVar.get()
showinfo(message=self.j("選んだ果物は" + a + "ですね。"))
if self.bananaVar.get() == 1:
showinfo(message=self.j("ちなみにバナナはおやつに含みません。"))
self.quit()
a = A("Fruits")
# end.
|
どっちから行きましょうか?では、 アルファベット順ということでチェックボタンから。
self.bananaVar = IntVar()
c = Checkbutton(self, text=self.j("バナナはおやつに含まない"),
variable=self.bananaVar, onvalue=1, offvalue=0)
self.bananaVar.set(1)
# ...
if self.bananaVar.get() == 1:
showinfo(message=self.j("ちなみにバナナはおやつに含みません。"))
|
ここでも、チェックボタンの状態(ON or OFF)を保持させる変数として、 エントリのtextvariableの場合と同様変数オブジェクトが顔を出しています。 チェックボタンの場合ONかOFFという値の特性からIntVarクラスを使って 1か零を保持させています(onvalue=オプションとoffvalue=オプション) が、もちろんStringVarなどを使っても構いません。
ラジオボタンの場合は、ボタングループという概念があります。 つまり、幾つかのラジオボタンのうち、通常はどれかひとつだけを選択できる (どれかを選択すると、他の全てのボタンは非選択状態になる) というルールですが、 Tkinterのラジオボタンは、これをStringVarを使うことで実現できています。 つまり、複数のラジオボタンに、「同じStringVarオブジェクトに、 おのおの違う値を持たせる」ことで、このようなラジオボタンの動作が実現できます。
self.fruitsVar = StringVar()
ra = { }
for e in ("りんご", "メロン", "もも"):
ra[e] = Radiobutton(fr, text=self.j(e),
variable=self.fruitsVar, value=e)
self.fruitsVar.set("メロン")
# ...
a = self.fruitsVar.get()
showinfo(message=self.j("選んだ果物は" + a + "ですね。"))
|
セクションのサブメニューに戻る
(first uploaded 2001/08/06 last updated 2002/03/11)