作業中のメモ

よく「計算機」を使って作業をする.知らなかったことを中心にまとめるつもり.

Python で GUI を扱う

どうも,筆者です. 前回に引き続き,PythonGUI を利用する方法についてまとめていく. 前回は,Python Script を exe 形式に変換する方法をまとめたが,その時に利用したスクリプトでは,画面を作成していなかった.

今回は,ボタンやテキストを配置し,より GUI よりのものを作成する.

workspacememory.hatenablog.com

雛形の作成

今回も,PythonGUI プログラムを作成する際に 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

これでうまく処理できる理由は,以下のサイトにまとまっている.

memopy.hatenadiary.jp

各要素の配置

定義はできたが,このままでは,各要素をどのように配置するか設定されていない状態となる.各要素の配置は,以下のようにする.

# ラベル,テキストボックス,ボタンという順に配置する
self.label.grid(column=0, row=0)
self.entry.grid(column=1. row=0)
self.button.grid(column=2. row=0)

大雑把だが,今回使用する機能の紹介を終える.他にも様々な引数をとるが,完全に把握し切れていないため,分からない部分は都度調べることにする.