PythonでGUIアプリを作成する(tkinter)

pythonでGUIアプリを作成(tkinter)
スポンサーリンク
スポンサーリンク

PythonでGUIアプリを作成できるモジュール tkinter(ティーキンター)の使い方を解説します。

この記事を読めば基本的な操作方法をマスターできるようになります。

スポンサーリンク

使用モジュール

tkinter は Python標準モジュールのためインストールは不要です。

ライブラリ :tkinter(公式ドキュメント
インストール:不要

tkinterとは

簡単にGUIを作成することができるツールキットで、GUI画面 から Python スクリプトを実行することができます。

試しに以下のコードを、普段使用しているエディタにコピペして実行してみて下さい。

これだけで下のような画面が作成できます。

画面は「×」を押して閉じることができます。

tkinterの構造

tkinter では、GUI画面をツリー状の階層構造を構成するように作成します。
順序としては ①Window作成 ②Frame配置 ③Widget配置 の順に作成します。
ボタンやラベルなどのオブジェクトを Widget(ウィジェット)と呼び、Widget を入れる箱を Frame(フレーム)と呼びます。

上の画面を作成するコードは以下のようになっています。
(スクリプトと同じディレクトリにpython_logo.pngが必要です。)
コードの解説は後述しています。

サンプルコードを順に解説していきます。

モジュールのインポート

tkinter をインポートします。
import * とすることで、メソッド呼び出し時のオブジェクト名 Tk. を省略する事ができます。

Window作成

Tk() はクラス Tk のインスタンス(オブジェクト)を生成して返します。この root が画面上のメインウィンドウに対応します。

メインウィンドウを作成した後に、ラベルやボタンなどのウィジェットを配置していきます。

最後に root.mainloop() でイベントループを開始して、ユーザーからの要求(イベント)を処理します。

Window設定

画面サイズ設定は geometory('横x縦') で指定します。
ピクセル単位で横・縦のサイズを指定して x(エックス)で区切ります。

デフォルトではウィンドウサイズは可変になっていますが resizable(Width=False, height=False) で固定に出来ます。引数は省略して resizable(False, False) または resizable(0,0) と記述出来ます。

Frame設定

下図のようなレイアウトで Frame を配置する設定を行います。
各フレームを格子状に配置するため grid で行列の位置を指定していきます。

Frame の詳細はこちらの記事を参照してください。
Python tkinter Frameの使い方

Frameスタイル設定

まず Frame のスタイルを設定します。
基本は Frame(Windowオブジェクト, width=横サイズ, height=縦サイズ) になります。

このサンプルでは Frame 領域を分かりやすくするために、relief で枠線スタイルを指定しています。デフォルトでは枠線は表示されません。また borderwidth で枠線の太さを指定しています。

Frameサイズを固定 (propagate)

Frame はデフォルトではボタンなどのWidgetに合わせて、サイズを自動で縮小拡大します。
自動で変更されたくない場合は、propagate(False) を指定してサイズを固定できます。

この例では Widget を pack で配置していますが、grid で配置する場合は grid_propagate(False) を使用してください。

Frameを配置 (grid)

先程定義した Frame を grid(row=行位置, column=列位置) で Window に配置します。

frame3 は 2列分を結合した Frame とするために、columnspan=2 と指定しています。

grid の詳細についてはこちらの記事で解説しています。
・関連記事:【Python/tkinter】Widgetの配置(grid)

Widget配置 (pack)

ラベルやボタンなどのWidgetを配置していきます。

pack の詳細についてはこちらの記事で解説しています。
・関連記事:【Python/tkinter】Widgetの配置(pack)


grid, pack以外にもplaceで配置する方法もあります。詳しくは以下の記事を参照してください。
・関連記事:【Python/tkinter】Widgetの配置(place)

ラベル(Label)

frame1(左上)にラベルを配置していきます。

まずラベルのスタイルを設定します。

Label(Frameオブジェクト, text='ラベル文字列', font=('フォント名', サイズ), bg='背景色', fg='文字色')
背景色は「16進数」もしくは「色名」で指定します。省略するとデフォルトの背景色無し、文字色黒になります。


設定したラベルを pack で配置します。

label_1a.pack() のように引数を省略すると、デフォルトの設定で中央配置・パディング(隙間)無しで設定されます。
padx, pady は外側の横・縦の隙間を指定、anchor は配置位置を指定しています。

ラベルについては以下の記事で詳しく解説しています。
・関連記事:【Python/tkinter】Label(ラベル)の使い方

ボタン(Button)

frame2(右上)の 上側のボタンを配置します。
ボタンを押すと、ボタンのテキストが「クリックしました」に変わります。

ボタンは Button(Frameオブジェクト, text='', command=動作させる関数) で指定します。

ここではボタンを押した時に、ボタンの文字を変更する関数を指定しています。

ボタンを押した時に動作させる関数は以下になります。


ボタンについては以下の記事で詳しく解説しています。
・関連記事:【Python/tkinter】Button(ボタン)の使い方

テキストボックス(Entry)

frame2(右上)のテキストボックス・ボタン・ラベルを配置します。
テキストボックスにテキストを入力してボタンを押すと、右側のラベルにコピーされます。

まずテキストボックスを Entry() で設定します。

テキストボックスの値を動的に取得するために、文字列を保持する StringVar() を変数 text として設定します。


次にボタンの設定を行います。
command には、引数付き関数 text.set(entry_2b.get()) を指定したいため、lambda 関数を使用する必要があります。

entry_2b.get() でテキストボックスに入力された文字列を取得し、その文字列を text.set() で変数 text に文字列を格納します。


最後に文字列を表示するラベルを設定します。

固定の文字列を表示するラベルでは引数 text に文字列を指定しますが、動的に変化させたい場合は引数 textvariable に変数を指定します。
ここでは、先程設定した text を指定しています。

これで ボタンを押す→テキストボックスの文字列を取得→ラベルに文字列を表示 という流れができました。


そして、設定した Widget を pack() を使用して配置していきます。

1行に3つの Widget を並べるために、引数 side=LEFT を指定して、左詰めに配置していきます。
デフォルトでは上詰めで縦方向に並んでいきます。

Entryについては以下の記事で詳しく解説しています。
・関連記事:【Python/tkinter】Entry(エントリー)の使い方

画像表示(Photoimage)

frame3(中央)に画像を表示させます。

画像は PhotoImage で読み込み、ラベルのオプション image で画像を指定することで表示できます。

図形描画(Canvas)

frame4(左下) に図形を描画するキャンバスを設定して、ボタン(右下)で図形を描画・削除させます。

キャンバスは Canvas(Frameオブジェクト, width=幅, height=高さ) で設定します。
ここでは、背景となる白のキャンバスも create_rectangle(横位置基準, 縦位置基準, 幅, 高さ) で作成しています。


次に Frame5 に描画と削除を実行するボタンを設定します。
create_rectangle() の引数 tag を設定しておくと、delete() でその tag を指定するだけで簡単に削除できます。

Canvasの使い方についてはこちらの記事で詳しく解説しています。
・関連記事:【Python/tkinter】Canvas(キャンバス)の使い方


以上でプログラムの解説は終了です。


PythonでGUIアプリを作成できるモジュールtkinter(ティーキンター)の使い方を解説しました。
ぜひ活用して業務の効率化などにお役立てください。

スポンサーリンク
GUI (tkinter)
スポンサーリンク
パイワーーク!