Python で GUI を扱う
どうも,筆者です. 前回に引き続き,Python で GUI を利用する方法についてまとめていく. 前回は,Python Script を exe 形式に変換する方法をまとめたが,その時に利用したスクリプトでは,画面を作成していなかった.
今回は,ボタンやテキストを配置し,より GUI よりのものを作成する.
workspacememory.hatenablog.com
雛形の作成
今回も,Python で GUI プログラムを作成する際に tkinter を利用する.tkinter を用いた場合の雛形となるものを以下に示す.
import tkinter as tk class AppClass(tk.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.createWidgets() def createWidgets(self): # ここに部品を配置する def main(): root = tk.Tk() root.title('title') # タイトルの設定 root.resizable(0, 0) # ウィンドウのリサイズ禁止 # インスタンスの生成 app = AppClass(master=root) # ループ処理 app.mainloop()
これに,肉付けを行い,画面を作成する.今回は,「ラベルの配置」,「テキストボックスの配置」,「ボタンの配置」を取り扱う.
ラベルの生成
HTML でいう「label」を配置する.tkinter では,以下のようにする.
self.label = tk.Label(self, text='sample')
テキストボックスの生成
HTML でいう一行テキストボックス「input type=text」を配置する.tkinter では,以下のようにする.
self.varEntry = tk.StringVar() self.entry = tk.Entry(self, textvariable=self.varEntry)
追加したテキストボックスには,テキストボックスに値を設定したり,テキストボックスから値を取り出すことができる.そのやり取りをするための変数を用意する必要がある. 「self.varEntry」がデータの受け渡しに利用する変数である.値の設定・値の取得はそれぞれ以下のようにする.
# 値の設定 self.varEntry.set('hoge') # 値の取得 data = self.varEntry.get()
ボタンの生成
HTML でいう「button」を配置する.tkinter では,以下のようにする.
self.button = tk.Button(self, text='button')
また,ボタンには押下時に関数を実行するよう,設定ができる.サンプルを以下に示す.
self.button = tk.Button(self, text='button', command=self.sampleFunc) def sampleFunc(self): print('call funciton')
ただ,この記述では関数に引数を渡すことができない.引数を渡して実行するには,以下のようにする.
self.button = tk.Button(self, text='button', command=self.sampleFunc(1)) def sampleFunc(self, val): def innerFunc(): print(val) return innerFunc
これでうまく処理できる理由は,以下のサイトにまとまっている.
各要素の配置
定義はできたが,このままでは,各要素をどのように配置するか設定されていない状態となる.各要素の配置は,以下のようにする.
# ラベル,テキストボックス,ボタンという順に配置する self.label.grid(column=0, row=0) self.entry.grid(column=1. row=0) self.button.grid(column=2. row=0)
大雑把だが,今回使用する機能の紹介を終える.他にも様々な引数をとるが,完全に把握し切れていないため,分からない部分は都度調べることにする.