今回は、GUI部品(ラベル、テキストボックス、チェックボックス、ラジオボタン)を表示してみます。
Python(tkinter)は少し自分の知っているものとしくみが異なるようで、ラベルなどを生成する関数にウィンドウ(フレーム)を渡すことで、その渡したウィンドウ(フレーム)に表示されます。
自分が知っている言語では、ラベルなどのオブジェクトを作成、ウィンドウ(ラベル)に追加する流れで部品が表示されました。
そんなライブラリですので、少し関数を組んで部品を追加表示するようにしてみました。
# -*- coding: utf-8 -*-
# 日本語コメントをエラーとしないように、UTF-8で保存
# 使用するライブラリのインポート
# 表示するウィンドウの幅と高さ
WINDOW_WIDTH = 500
WINDOW_HEIGHT = 220
class Frame(Tk.Frame):
"""
フレームを生成する
"""
def __init__(self, master = None):
# ウィンドウを作成
Tk.Frame.__init__(self, master)
def setSize(self, width, height, isCenter = True):
"""
サイズを指定、ディスプレイ中央に表示する
"""
# サイズを指定した文字列
geometry = "{0}x{1}".format(width, height)
if isCenter: # ディスプレイ中央に表示する
# ディスプレイの幅と高さを取得
s_width = self.winfo_screenwidth()
s_height = self.winfo_screenheight()
# 表示する左上の座標を算出
win_left = int((s_width - width) / 2)
win_top = int((s_height - height) / 2)
# 表示位置を指定した文字列を追加
geometry += "+{0}+{1}".format(win_left, win_top)
# サイズと表示位置を中央に指定(幅 x 高さ + 左位置 + 上位置)
self.master.geometry(geometry)
def setTitle(self, title):
"""
タイトルを指定する
"""
self.master.title(title)
def disableMaximum(self):
"""
最大化を無効化
"""
self.master.resizable(False, False)
class guiParts():
"""
GUI部品を追加表示する
すべてグリッド、左寄せで表示
"""
def addLabel(self, row, column, text):
"""
ラベルを追加表示する
"""
lbl = Tk.Label(self, text = text)
lbl.grid(row = row, column = column, pady = 5, padx = 20, sticky = Tk.W)
return lbl
def addTextBox(self, row, column, width, text = None):
"""
テキストボックスを追加表示する
"""
textbox = Tk.Entry(self, width = width)
textbox.grid(row = row, column = column, sticky = Tk.W)
if text != None:
textbox.insert(Tk.END, text)
return textbox
def addCheckBox(self, row, column, text, valiable = None):
"""
チェックボックスを追加表示する
"""
if valiable == None:
valiable = Tk.BooleanVar()
checkBox = Tk.Checkbutton(self, text = text, variable = valiable)
checkBox.grid(row = row , column = column, sticky = Tk.W)
return (checkBox, valiable)
def addRadioButton(self, row, column, text, onValue, valiable = None):
"""
ラジオボタンを追加表示する
"""
if valiable == None:
valiable = Tk.IntVar()
rbn.grid(row = row, column = column, sticky = Tk.W)
return (rbn, valiable)
# 継承した場合など、実行されないようにする(現状、意味は特にない)
if __name__ == "__main__":
# メインウィンドウを生成、各設定を行う
w = Frame()
w.setTitle('メインウィンドウ')
w.setSize(WINDOW_WIDTH, WINDOW_HEIGHT)
w.disableMaximum()
# ラベル + テキストボックス
guiParts.addLabel(w, 0, 0, 'テキストボックス:')
guiParts.addTextBox(w, 0, 1, 20, 'ABC')
# ラベル + チェックボックス
chk1[1].set(False)
chk2[1].set(True)
# ラベル + ラジオボタン
valRadio = Tk.IntVar()
valRadio.set(1)
w.pack()
w.mainloop()