【tkinter入門】PythonでのGUIアプリ作成とインストールから画像表示まで解説のカバー画像

【tkinter入門】PythonでのGUIアプリ作成とインストールから画像表示まで解説

公開日:2025/03/26最終更新日:2025/03/29

自作や社内のアプリ・ツールの開発を行う際に「コマンドプロンプトでも実行できるが使いづらい」「市販アプリのようにウィンドウ操作ができるGUIアプリ・ツールにしたい」などと考えることが多いと思います。


そんな時には、Pythonライブラリの「tkinter」がおすすめです。「tkinter」を使えるようになれば、簡単にGUIアプリを作成することが可能になり、業務の効率化やコストの削減なども期待できるでしょう。


本記事では、「tkinter」でのGUIアプリ・ツールの作成方法について、初心者にもわかりやすく解説していきます。

目次

1.Python tkinterの概要

tkinterとは

tkinter(ティーケーインター)とは、「Pythonの公式が提供している標準搭載のGUIライブラリ」です。つまり、pipなどで追加のインストールを行わずに使用できるライブラリになっています。


tkinterでのGUIアプリ・ツール作成では以下のようなことが可能です。

  • ウィンドウ作成

  • ウィジェット(ボタンやラベル、テキストボックスなど)の追加と配置

  • ボタンなどの操作による動作(イベント処理)の設定

tkinterはマルチプラットフォーム対応で、Windows、Mac、Linuxなどの複数環境へ対応しています。


tkinterの公式ドキュメント

Python3 tkinterのインストールについて

tkinterはPython3に標準で搭載されているため、インストールの必要はなく、Pythonのインストールが正常にできていれば使用可能です。

tkinterの動作確認

正常に動作するかの確認方法は2種類で「import処理」と「基本動作」になります。


【import処理の確認】

ソースコードに以下の内容を含めて実行で確認可能です。

※Python対応のIDEやエディタツールでは実行しなくともエラーを表示してくれる場合があります。

import tkinter

importが正常にできている場合には問題なく実行できますが、importができていない場合にはエラーが発生し、内容は以下の通りです。

No module named ‘tkinter’

【基本動作の確認】

コマンドプロンプトで以下のコマンドを実行することで確認ができます。

> python -m tkinter

成功すれば、以下のようなウィンドウが表示されるため、その場合は問題なしです。


しかし、実行できなかった場合には以下のようなエラーが発生します。

No module named ‘tkinter’

tkinterが使えない(No module named 'tkinter')の対策

エラーが発生した場合は、以下のことを確認しましょう。

  • Python公式サイトで不具合発生状況の確認

  • 対象のバージョンがサービス終了していないかの確認

  • Python3の再インストールして動作確認

これらの確認を行っても実行できない場合は公式に問い合わせを行ってください。

tkinter以外のGUIライブラリ

Pythonにはtkinter以外にもGUIライブラリがあるため、少しだけ紹介いたします。

PyQt

豊富なウィジェットを駆使した高いデザイン性を必要とするGUIアプリ・ツールの開発におすすめです。商用目的での利用ではライセンスに注意が必要になります。

WxPython

ネイティブな見た目と使い勝手を持つGUIアプリ・ツールを作成したい場合におすすめです。ウィジェットも多く、デザインの自由度も高いという魅力もあります。

Kivy

マルチタッチやマルチプラットフォーム対応でiOSやAndroidでも動くGUIアプリ・ツールを作成する場合におすすめです。高いパフォーマンスで柔軟なデザインもできます。


自由度の高いデザイン性と豊富な機能を持っておりますが、初心者にはシンプルな「tkinter」を学んでからが良いでしょう。

拡張モジュール「ttk」

tkinterにはttk(Theme Tkの略)という拡張モジュールがあります。


tkinterの標準モジュールに加え、tkinterよりもスタイリッシュなデザインのウィジェットが使用可能です。テーマ機能を使用すれば、間単に各要素のデザイン変更もできます。


tkinterよりも機能が追加された分、処理速度の低下やメモリ使用量の増加という欠点はありますが、デザインにこだわるなら利用も検討して良いでしょう。

2.そもそもGUIアプリ・ツールとは

GUIとは

GUI(Graphical User Interface)とは、「コンピュータやアプリなどを操作するための視覚的なインターフェース」です。


画面内の画像、アイコン、ラベル、ボタンなどで操作を行うことができ、コマンドプロンプトなどのテキストベースでの操作が基本のインターフェース(CLI:Command Line Interface)に比べて、GUIは直感的に操作できることが魅力です。

GUIのメリット3つ

GUIのメリットは主に以下の3つになります。

  • 操作性の向上

  • 処理状況の可視化

  • アプリ・ツールの利便性向上

それぞれ詳しく見ていきましょう。

操作性の向上

前述の通り、GUIには画面があるため、コマンドプロンプトなどには必要なコマンドラインの知識を必要としません。

ボタン、ラベル、テキストボックスなどの視覚的な要素により、コマンドでは複雑な操作もシンプルに実行することが可能です。

処理状況の可視化

コマンドプロンプトではコマンドの実行結果がテキストベースなのに対して、GUIではグラフでの表示や画面の遷移、新規ウィンドウの表示など処理の結果や状況を表示することができます。

データ入力やエラーなどの効率化も期待できるでしょう。

アプリ・ツールの利便性向上

テキストベースのインターフェースを使用するアプリ・ツールでは「実行方法」「実行結果」「エラー時の対応」などの操作に関する説明が複雑になりがちです。一方、GUIアプリ・ツールであれば、視覚的な要素により複数の操作を迅速に効率よく行えるように設計することができます。

GUIのウィジェットとは

GUIアプリ・ツールの作成において欠かせない要素が「ウィジェット」です。

ウィジェットとは、「GUIを構成する基本的な部品」を指します。


具体的には以下のようなものです。

  • ボタン

  • ラベル

  • テキストボックス

  • チェックボックス

  • ドロップダウン

  • ラジオボタン など

GUIでは画面にこれらの要素をどのように組み合わせて、どのように配置するかが重要になります。


本記事では構成や設計のノウハウについては詳しくは触れませんので、興味がある場合は調べてみると良いでしょう。


関連記事

【Python初心者向け】Pythonで作れるものや入門用のサンプルコード、おすすめの参考書を紹介!

3.tkinterのメリット・デメリット

メリット

tkinterのメリットは以下のようなものがあります。

  • 構文がシンプル

    tkinterはシンプルでわかりやすい構文が特徴です。Python初心者でも基本的なウィジェットやレイアウト管理が簡単に行えるため、短時間でGUIアプリ・ツールの作成ができます。

  • 動作が軽く、処理が速い

    tkinterは動作が軽く、処理速度が速いのも特徴です。リソースが限られた環境でのシンプルなGUIアプリ・ツールの開発においては高いパフォーマンスを発揮できます。

  • マルチプラットフォーム対応

    前述にもあるようにWindows、Mac、Linuxといったよく利用されるプラットフォームに対応可能です。そのため、別環境で作成したプログラムであっても、再利用することができます。

デメリット

tkinterのデメリットは以下の通りです。

  • 複雑なレイアウトの構築が難しい

    tkinterはグリッド状にウィジェットを配置するなどのシンプルなレイアウトを作成するのにはおすすめです。しかし、複雑なレイアウトを実現するにはコードが冗長になり、可読性やメンテナンス性が損なわれる可能性があります。

  • 更新頻度が低い

    tkinterはPythonの標準ライブラリであるため、Pythonのリリースでしか更新されません。そのため、他のGUIライブラリよりも機能の追加や改善が行われる回数は低くなるのが欠点です。


関連記事

Pythonを学習するメリットとは?デメリットや向き不向き、将来性などわかりやすく解説

4.tkinterチュートリアル

前述にもある通りインストールは必要ありません。そのため、インポートを行えばすぐに利用可能です。


tkinterの基本となるソースコードは以下のようになります。


例)

# ライブラリのインポート

import tkinter as tk


# tkオブジェクトの作成

root = tk.Tk()

root.title("test")

root.geometry("300x200")


# ウィジェットの配置や、イベント処理などを記述

label = tk.Label(root, text="テキストテキスト")

label.pack()


# メインループの実行

root.mainloop()

それでは1つずつ見ていきましょう。


ここで行っているのがライブラリのインポートです。「as句」を使用すると指定した名称でコードが記載できるようになります。

例で行っているのは「tkinter」では長いため、「tk」という略称で扱える設定です。

# ライブラリのインポート

import tkinter as tk

ここではGUIアプリ・ツールのメインウィンドウの設定をしている箇所で各行で以下のような処理をしております。

  • 1行目:アプリ・ツールのメインウィンドウの作成

  • 2行目:ウィンドウに表示されるタイトルの設定

  • 3行目:ウィンドウのサイズ設定

# tkオブジェクトの作成

root = tk.Tk()

root.title("test")

root.geometry("300x200")

ここで行っているのはウィジェットの追加とレイアウトです。

例ではラベルの設定とラベルの配置を行っております。

# ウィジェットの配置や、イベント処理などを記述

label = tk.Label(root, text="テキストテキスト")

label.pack()

ここではウィンドウの表示とイベント処理の待機ができるようにする処理です。

# メインループの実行

root.mainloop()

詳しい機能については次章から紹介していきます。

5.メイン画面(root)の操作

ここではメインウィンドウに関する処理を見ていきましょう。

タイトル設定(root.title)

ウィンドウのタイトル設定を行うメソッドです。

設定したタイトルはウィンドウの左上に表示されます。

root.title(“任意のタイトルを設定")

ウィンドウサイズ設定(root.geometry)

ウィンドウのサイズと基準位置を設定するメソッドです。

以下の例では幅800、高さ600、ウィンドウの左上角を座標(0, 0)としてウィジェット配置の基準位置を座標(100,100)設定しています。

root.geometry("800x600+100+100")

ウィンドウサイズ変更 可否(root.resizable)

ウィンドウサイズの幅と高さを可変にするかの設定するメソッドです。

設定は真偽値(True、 False)で設定し、以下の例では幅の可変、高さを固定に設定しています。

root.resizable(True, False)

ウィンドウ最大サイズ設定(root.maxsize)

ウィンドウの最大サイズを設定するメソッドです。

主にアプリ・ツールを使用する画面より大きくならないことを避けるために使用し、以下の例では幅1000、高さ700以上にはならないように設定しています。

root.maxsize(1000, 700)

ウィンドウ最小サイズ設定(root.minsize)

ウィンドウの最小サイズを設定するメソッドです。

主にウィンドウの表示崩れが起きないようにするために使用し、以下の例では幅240、高さ160以下にはならないように設定しています。

root.minsize(240, 160)

ウィンドウ属性設定(root.configure)

ウィンドウの属性を一括で設定できるメソッドです。

設定できる属性には背景色やサイズ、タイトルなどの前述の処理で行っていた設定もできます。以下の例は背景色を黒にする設定です。

root.configure(bg="black")

イベントループ開始(root.mainloop)

これはウィンドウを表示し続け、ユーザーの操作を待機するために使用するメソッドになります。これがないと画面を表示し、操作されるまで維持することができないため注意が必要です。

# メインループの実行

root.mainloop()


関連記事

Pythonインストール方法(Mac・Linux・Windows)ダウンロードから実行方法まで解説


Pythonとは?コードの具体例など人気プログラミング言語を初心者にわかりやすく解説

6.ウィジェットのレイアウト方法

tkinterにはレイアウトマネージャーが存在し、それを使用することでウィジェットの配置を行っていきます。

主に使用されるのは以下の3つになります。

  • pack:ソースコードの記載順にウィジェット配置

  • grid:行と列を指定したウィジェット配置

  • place:座標を指定したウィジェット配置


それぞれ詳しく見ていきましょう。

pack:ソースコードの記載順にウィジェット配置

packは、記載順にウィジェットを順番に配置するシンプルなレイアウトマネージャで、ウィジェットを上下または左右に配置する際におすすめです。


以下のオプションを使用して配置を設定していきます

引数

内容

side

ウィジェットの配置の指定を「TOP(上)、BOTTOM(下)、LEFT(左)、 RIGHT(右)」から選択

fill

ウィジェットが余白をどう埋めるかを「X(幅方向埋め)、Y(高さ方向埋め)、BOTH(両方向埋め)、 NONE(指定なし)」から選択

expand

ウィジェットが利用可能な残りの領域全体に広げるかどうかを真偽値「True(分配する)、 False(分配しない)」で指定


例)

# ライブラリのインポート

import tkinter as tk


# tkオブジェクトの作成

root = tk.Tk()

root.title("packテスト")

root.geometry("300x200")


# ウィジェットの配置


# 配置を上、幅方向埋めで表示

btn1 = tk.Button(root, text="Button 1")

btn1.pack(side=tk.TOP, fill=tk.X)


# 配置を左、高さ方向埋めで表示

btn2 = tk.Button(root, text="Button 2")

btn2.pack(side=tk.LEFT, fill=tk.Y)


# 配置を右、利用可能な空間をすべて使用

btn3 = tk.Button(root, text="Button 3")

btn3.pack(side=tk.RIGHT, expand=True)


# メインループの実行

root.mainloop()

grid:行と列を指定したウィジェット配置

gridは、ウィジェットを行と列の形式で配置するレイアウトマネージャで、ウィジェットの複雑なレイアウトを簡単に設定できるのでおすすめです。


以下のオプションを使用して配置を設定していきます。

引数

内容

row

ウィジェットを配置する行の指定

column

ウィジェットを配置する列の指定

rowspan

ウィジェットがまたがる行数の指定

columnspan

ウィジェットがまたがる列数の指定

sticky

ウィジェットをセル内でどの方向に引き伸ばすかを「N(北), E(東), S(南), W(西)」またはこれらの組み合わせ(例:NS(南北), EW(東西))で指定


例)

# ライブラリのインポート

import tkinter as tk


# tkオブジェクトの作成

root = tk.Tk()

root.title("gridテスト")

root.geometry("300x200")


# ウィジェットの配置


# 0行、0列で配置

label1 = tk.Label(root, text="Label 1")

label1.grid(row=0, column=0)


# 0行、1列で配置(label1の右隣)

label2 = tk.Label(root, text="Label 2")

label2.grid(row=0, column=1)


# 1行、0列で配置(label1の下)

button1 = tk.Button(root, text="Button 1")

button1.grid(row=1, column=0)


# 1行、1列で配置(label2の下)

button2 = tk.Button(root, text="Button 2")

button2.grid(row=1, column=1)


# 2行、0列、2列分の範囲で配置(button1、button2の下)

button3 = tk.Button(root, text="Button 3")

button3.grid(row=2, column=0, columnspan=2)


# 3行、0列、2列分の範囲、東西(幅方向)に引き伸ばして配置(button1、button2の下)

button4 = tk.Button(root, text="Button 4")

button4.grid(row=3, column=0, columnspan=2, sticky=tk.W+tk.E)


# メインループの実行

root.mainloop()

place:座標を指定したウィジェット配置

placeは、ウィジェットを座標を使用して正確に配置するレイアウトマネージャで、絶対位置や相対位置でレイアウトする際におすすめです。


以下のオプションを使用して配置を設定していきます。

引数

内容

x・y

ウィジェットを配置する絶対座標を指定

relx・rely

ウィジェットを配置する相対座標を指定(0.0(xは左端、yは最上)から1.0(xは右端、yは最下)の範囲)

width・height

ウィジェットの幅と高さを指定

relwidth・relheight

ウィジェットの相対的な幅と高さを指定(0.0(最小)から1.0(最大)の範囲)


例)

# ライブラリのインポート

import tkinter as tk


# tkオブジェクトの作成

root = tk.Tk()

root.title("placeテスト")

root.geometry("300x200")


# ウィジェットの配置


# 座標(50, 50)に配置

label1 = tk.Label(root, text="Label")

label1.place(x=50, y=50)


# 座標(150, 50)に幅50、高さ10で配置

label2 = tk.Button(root, text="Button")

label2.place(x=150, y=50, width=50, height=10)


# 上下左右の中間に配置

button1 = tk.Button(root, text="Button")

button1.place(relx=0.5, rely=0.5)


# 最下で左右の中間に幅と高さ半分くらいで配置

button2 = tk.Button(root, text="Button")

button2.place(relx=0.5, rely=1.0, relwidth=0.5, relheight=0.5)


# メインループの実行

root.mainloop()

7.tkinterでよく使用される10個のウィジェット

①Label(ラベル):テキスト表示

Labelウィジェットは、文字や画像といった基本的に変化のない静的な情報を表示するために使用されるウィジェットです。


以下の引数を指定して表示内容を設定します。

引数

内容

master

親ウィジェット

text

表示テキスト

font

テキストのフォント(例: ("Arial", 16))

bg

背景色

fg

テキスト色

例)以下の設定で表示する場合の例です。

親ウィジェット:メインウィンドウ

表示テキスト:テストテキスト

フォント:Arialのサイズ16

背景色:黄色

テキスト色:青

label = tk.Label(root, text="テストテキスト", font=("Arial", 16), bg="yellow", fg="blue")

label.pack()

②Button(ボタン):ボタン表示

Buttonウィジェットは、その名の通りクリック可能なボタンを作成できるウィジェットになります。クリック時のアクション(処理)を設定することも可能です。


以下の引数を指定してボタンの表示形式とクリック時のアクションを設定します。

引数

内容

master

親ウィジェット

text

表示テキスト

command

クリック時に実行される関数

bg

ボタンの背景色

fg

表示テキストの色

例)以下の設定で表示する場合の例です。

親ウィジェット:メインウィンドウ

表示テキスト:クリック

クリック時のアクション:button_click_actionメソッド

背景色:緑

テキスト色:白

def button_click_action():

    print("Click Button")


button = tk.Button(root, text="クリック", command=button_click_action, bg="green", fg="white")

button.pack()

③Entry(エントリー):改行なしテキストボックス

Entryウィジェットは、シングルライン(改行なし)のテキスト入力ができるウィジェットです。


以下の引数を指定してエントリーと入力時の表示を設定します。

引数

内容

master

親ウィジェット

show

入力テキストを隠す際の文字(例: show="*")

width

エントリーの幅

font

入力テキストのフォント

例)以下の設定で表示する場合の例です。

親ウィジェット:メインウィンドウ

エントリーの幅:30

フォント:Arialのサイズ14

entry = tk.Entry(root, width=30, font=("Arial", 14))

entry.pack()

④Text(テキスト):改行ありテキストフィールド

Textウィジェットは、マルチライン(改行あり)のテキスト入力ができるウィジェットです。


以下の引数を指定してテキストと入力時の表示を設定します。

引数

内容

master

親ウィジェット

height

テキストフィールドの高さ(行数)

width

テキストフィールドの幅(文字数)

font

入力テキストのフォント

例)以下の設定で表示する場合の例です。

親ウィジェット:メインウィンドウ

テキストフィールドの高さ:10行

テキストフィールドの幅:40文字

フォント:Arialのサイズ14

text = tk.Text(root, height=10, width=40, font=("Arial", 14))

text.pack()

⑤CheckButton(チェックボタン):複数選択可のチェックボックス

CheckButtonウィジェットは、オンオフの状態を持ち、主に複数選択可能な選択肢を用意する際に使用するウィジェットです。


以下の引数を指定してチェックボタンの表示と値の管理を設定します。

引数

内容

master

親ウィジェット

text

表示テキスト

variable

オンオフの状態を保持するための変数(通常はtk.IntVar)

onvalue

チェックされたときに変数に設定される値(デフォルト:1)

offvalue

チェックされていない、またはチェックが外れたときに変数に設定される値(デフォルト:0)

例)以下の設定で表示する場合の例です。


3つのチェックボタンを用意

オンオフ状態を保持する変数をチェックボタンと同じ数だけ用意

親ウィジェット:メインウィンドウ

テキスト:チェック1、チェック2、チェック3

オンオフ状態を保持する変数:用意した変数をそれぞれ設定

チェックオン時の設定値:1(デフォルト)

チェックオフ時の設定値:0(デフォルト)

# チェックボタンのオンオフ状態を保持するための変数を作成

var1 = tk.BooleanVar()

var2 = tk.BooleanVar()

var3 = tk.BooleanVar()


# チェックボックスを作成

checkbox1 = tk.Checkbutton(root, text="チェック 1", variable=var1)

checkbox2 = tk.Checkbutton(root, text="チェック 2", variable=var2)

checkbox3 = tk.Checkbutton(root, text="チェック 3", variable=var3)


# チェックボックスをウィンドウに配置

checkbox1.pack()

checkbox2.pack()

checkbox3.pack()

⑥Radiobutton(ラジオボタン):1つだけ選べるボックス

Radiobuttonウィジェットは、オンオフの状態を持ち、主に複数選択肢から1つを選択できるようにする際に使用するウィジェットです。


以下の引数を指定してラジオボタンの表示と値の管理を設定します。

引数

内容

master

親ウィジェット

text

表示テキスト

variable

オンオフの状態を保持するための変数(通常はtk.IntVarまたはtk.StringVar)

value

オン時に変数へ設定する値

例)以下の設定で表示する場合の例です。


3つのラジオボタンを用意

オンオフ状態を保持する変数を1つ用意

親ウィジェット:メインウィンドウ

テキスト:ラジオボタン 1、ラジオボタン 2、ラジオボタン 3

オンオフ状態を保持する変数:用意した1つの変数をすべてに設定

オン時の設定値:ラジオボタン 1→1、ラジオボタン 2→2、ラジオボタン 3→3

# ラジオボタンのオンオフ状態を管理するための変数を作成

var = tk.StringVar(value="1")  # 初期値を設定


# ラジオボタンを作成

radiobutton1 = tk.Radiobutton(root, text="ラジオボタン 1", variable=var, value="1")

radiobutton2 = tk.Radiobutton(root, text="ラジオボタン 2", variable=var, value="2")

radiobutton3 = tk.Radiobutton(root, text="ラジオボタン 3", variable=var, value="3")


# ラジオボタンをウィンドウに配置

radiobutton1.pack()

radiobutton2.pack()

radiobutton3.pack()

⑦Scale(スケール):スライダー表示

Scaleウィジェットは値の選択ができるスライダーが必要な際に使用するウィジェットです。


以下の引数を指定してスケールの表示と値の管理を設定します。

引数

内容

master

親ウィジェット

from_

スケールの最小値

to

スケールの最大値

orient

: スケールの移動方向(tk.HORIZONTAL(左右)またはtk.VERTICAL(上下))

variable

スケールの値を保持する変数(通常はtk.IntVarまたはtk.DoubleVar)

例)以下の設定で表示する場合の例です。


スケールの値を保持する変数を用意

親ウィジェット:メインウィンドウ

最小値:0

最大値:100

移動方向:左右

スケールの値を保持する変数:用意した変数を設定

var = tk.IntVar()


scale = tk.Scale(root, from_=0, to=100, orient=tk.HORIZONTAL, variable=var)

scale.pack()

⑧Frame(フレーム):ウィジェットのグループ化

Frameウィジェットは、他のウィジェットをグループ化しレイアウト整理する役割を持つウィジェットです。


以下の引数を指定してフレームの表示内容を設定します。

引数

内容

master

親ウィジェット

bg

フレームの背景色

width

フレーム幅

height

フレーム高さ

例)以下の設定で表示する場合の例です。


フレーム内(1つ)とフレーム外(2つ)に設定するラベルウィジェットを用意

親ウィジェット:メインウィンドウ

背景色:ライトブルー

幅:グループ化するラベルの幅に依存

高さ:グループ化するラベルの高さに依存

label = tk.Label(root, text="フレーム外ラベル")

label.pack()


# フレームを作成して配置

frame = tk.Frame(root, bg='lightblue')

frame.pack(padx=10, pady=10)


# フレーム内にラベルを作成して配置

label1 = tk.Label(frame, text="フレーム内ラベル 1")

label1.pack(padx=5,pady=5)


label2 = tk.Label(frame, text="フレーム内ラベル 2")

label2.pack(padx=5,pady=5)

⑨Canvas(キャンバス):画像表示

Canvasウィジェットは、図形や画像を自由に描画できる領域を作成するウィジェットです。


以下の引数を指定してキャンバスの表示内容を設定します。

引数

内容

master

親ウィジェット

bg

キャンバスの背景色

width

キャンバス幅

height

キャンバス高さ

例)以下の設定で表示する場合の例です。


親ウィジェット:メインウィンドウ

背景色:白

幅:300

高さ:200

青の線を描画

赤の矩形を描画

canvas = tk.Canvas(root, width=300, height=200, bg="white")

canvas.pack()


# 線を描画

canvas.create_line(0, 0, 300, 200, fill="blue")


# 矩形を描画

canvas.create_rectangle(50, 50, 250, 150, outline="red", width=2)

⑩Menu(メニュー):ウィンドウにメニュー追加

Menuウィジェットは、ウィンドウにメニューバーの追加ができるウィジェットです。


以下の引数を指定してキャンバスの表示内容を設定します。

引数

内容

master

親ウィジェット

bg

背景色

fg

テキスト色

font

メニューテキストのフォント

postcommand

メニュー表示前の実行関数

tearoff

True、Falseで指定

True設定で、メニューをウィンドウから独立したウィンドウとして生成(デフォルトはTrue)

メニュー項目を細かく設定するために使用するメソッドは以下の通りです。

  • add_command():通常のメニュー項目追加

  • add_separator():メニューに区切り追加

  • add_cascade():サブメニュー追加

  • add_checkbutton():チェックボタン追加

  • add_radiobutton():ラジオボタン追加


例)以下の設定で表示する場合の例です。


メインウィンドウでメニューバーを生成

生成したメニューバーを親として、独立したメニューウィンドウの要素を生成

メニューウィンドウの項目に「新規」「開く」「保存」を追加

メニューウィンドウに区切り線を追加

メニューウィンドウの項目に「終了」を追加

メニューバーに「ファイル」という名称でメニューウィンドウを設定

メインウィンドウにメニューバーを設定

def menu_command():

    print("メニューが選択されました")


menubar = tk.Menu(root)

filemenu = tk.Menu(menubar, tearoff=True)

filemenu.add_command(label="新規", command=menu_command)

filemenu.add_command(label="開く", command=menu_command)

filemenu.add_command(label="保存", command=menu_command)

filemenu.add_separator()

filemenu.add_command(label="終了", command=root.quit)

menubar.add_cascade(label="ファイル", menu=filemenu)


root.config(menu=menubar)


関連記事

Pythonライブラリとは?使い方や調べ方、おすすめのライブラリなどわかりやすく解説

8.イベント処理の方法

tkinterのイベント処理

tkinterでは、ユーザーの操作によってアプリ・ツールの処理を制御するためにイベント処理を用意します。


イベント処理は、特定のイベント(クリックやフォーカスなど)に関数を紐づける「イベントバインディング」で設定が可能です。


tkinterでは以下のようにウィジェットのbindメソッドで設定を行います。

widget.bind(event, handler)

項目

内容

widget

イベントをバインドしたいウィジェット

event

対象のウィジェットにバインドするイベント(例:"<Button-1>"、"<KeyPress-a>")

handler

イベント発生で実行される関数(イベントハンドラ)

例えば、ボタンクリックでのイベント処理は以下の通りです。

def button_clicked(event):

    label["text"] = "ボタンがクリックされました!"


label = tk.Label(root, text="ボタンがクリックされていません")

label.pack()


button = tk.Button(root, text="クリック")

button.pack()


button.bind("<Button-1>", button_clicked)

このイベントではボタンがクリックされた際にラベルの表示を変更する処理を行っています。


【補足】

def button_clicked(event):

    label["text"] = "ボタンがクリックされました!"

上記のようにイベントハンドラに設定する関数には引数にeventを設定することが必要です。

このeventには以下のような情報が含まれています。

取得方法

内容

event.type

発生したイベントの種類(例:ButtonPress、KeyPress)

event.widget

イベントが発生したウィジェット

event.x, event.y

イベントが発生したウィジェットの相対座標

event.x_root, event.y_root

イベントが発生したスクリーンの絶対座標

event.char

押下されたキー文字 ※KeyPressイベントの場合

event.keysym

押下されたキーシンボル(例:"a", "Shift_L") ※KeyPressイベントの場合

tkinterのイベントの種類

割り当てることができるイベントの種類は以下の通りです。

  • マウスイベント:クリック、移動、スクロールなど

  • キーボードイベント:キーの押下、キーの解放、特殊キーの押下など

  • フォーカスイベント:対象ウィジェットにフォーカスしたり、フォーカスが外れたりすること

  • その他:ウィンドウのサイズ変更、ウィンドウのクローズなど

それぞれ詳しく見ていきましょう

マウスイベント

イベント名

内容

<Button-1>

マウスの左クリック

<Button-2>

マウスの中ボタンクリック

<Button-3>

マウスの右クリック

<Double-Button-1>

マウスの左ボタンダブルクリック

<Motion>

マウスが動いたとき

<Enter>

マウスがウィジェットに入ったとき

<Leave>

マウスがウィジェットから出たとき

キーボードイベント

イベント名

内容

<KeyPress>

任意のキーを押下

<KeyRelease>

任意のキーから離された

<KeyPress-a>

"a"キーを押下

<KeyRelease-a>

"a"キーから離された

フォーカスイベント

イベント名

内容

<FocusIn>

ウィジェットにフォーカスする

<FocusOut>

ウィジェットからフォーカスを外す

その他

イベント名

内容

<Destroy>

ウィンドウを閉じる

<Configure>

ウィジェットやウィンドウのサイズ変更

9.ダイアログの使い方

tkinterでは、メッセージやファイルなどを表示するためのダイアログが用意されております。

本章ではその中からよく使用される以下の2つについて見ていきましょう。

  • メッセージボックス

  • ファイルダイアログ

メッセージボックス

メッセージボックスは、メッセージや確認、エラー、警告などの簡単な操作や確認を行う際に使用されるダイアログです。


使用する際は以下のようにインポートを行います

from tkinter import messagebox

使用できるメッセージボックスは以下の通りです。

  • messagebox.askokcancel():はい/いいえの確認を行うためのダイアログ

  • messagebox.askquestion():質問用のダイアログ

  • messagebox.askyesno():はい/いいえの選択を行うためのダイアログ

  • messagebox.showerror():エラーメッセージを表示するためのダイアログ

  • messagebox.showinfo():通常のインフォメーションダイアログ

  • messagebox.showwarning():警告メッセージを表示するためのダイアログ

  • messagebox.askretrycancel():retry/cancelの確認を行うためのボックス

各関数での引数は以下の通りです。

引数

内容

title

ダイアログのタイトル

message

表示するメッセージ

**options

その他

代表例:

 title:ダイアログのタイトルバーに表示されるテキストの設定

 parent:ダイアログとウィンドウとの関連付け

 geometry:ピクセル単位でのダイアログサイズと位置の指定

 resizable:ダイアログサイズの「可変・不変」の設定

 wraplength:メッセージの折り返しまでの文字数指定

例)以下の例は確認ボックスを使用して処理を行っています。

処理内容:確認ボックスでOKが選択された場合「OK」、キャンセルが選択された際に「NG」を表示

from tkinter import messagebox


def show_messagebox():

    result = messagebox.askokcancel("確認", "この操作を実行しますか?")

    if result:

        print("OK")

    else:

        print("NG")


button = tk.Button(root, text="メッセージボックスを開く", command=show_messagebox)

button.pack()

ファイルダイアログ

ファイルダイアログは、ユーザーにファイルを選択してもらい、開いたり、保存したりする際に使用されるダイアログです。


使用する際は以下のようにインポートを行います

from tkinter import filedialog

使用できるファイルダイアログは以下の通りです。

  • filedialog.askopenfilename():ファイルオープン用ダイアログ

  • filedialog.askopenfilenames():複数ファイルオープン用ダイアログ

  • filedialog.asksaveasfilename():ファイルセーブ用ダイアログ

  • filedialog.askdirectory():フォルダ選択用ダイアログ

各関数での引数は以下の通りです。

引数

内容

title

ダイアログのタイトル

filetypes

選択するファイルタイプの設定(例:[("テキストファイル", "*.txt")])

例)以下の例はファイルを開くダイアログを使用してテキストファイルの内容を表示する処理を行っています。

import tkinter.filedialog as filedialog


def open_file():

    filename = filedialog.askopenfilename(title="ファイルを開く", filetypes=[("テキストファイル", "*.txt")])

    if filename:

        with open(filename, "r") as f:

            text = f.read()

            print(text)


button = tk.Button(root, text="ファイルを開く", command=open_file)

button.pack()

10.まとめ

ここまでPythonのGUIライブラリ「tkinter」の使用方法について紹介してきました。


自作や社内のシンプルなGUIアプリ・ツールを作成する際にはおすすめです。うまく使いこなすことができれば、今までコマンドプロンプトなどのテキストベースで行っていた作業もGUIアプリ・ツールに置き換えて、作業の効率化を図れるでしょう。


本記事が皆様にとって少しでもお役に立てますと幸いです。


フリーランスボード」は、数多くのフリーランスエージェントが掲載するITフリーランスエンジニア・ITフリーランス向けの案件・求人を一括検索できるサイトです。


開発環境、職種、単価、稼働形態、稼働日数など様々な条件から、あなたに最適なフリーランス案件・求人を簡単に見つけることができます。

単価アップを目指す方や、自分の得意なスキルを活かせる案件に参画したい方は、ぜひ「フリーランスボード」をご利用ください。

無料で登録したらスカウトを待つだけ フリーランスの新しい仕事探しを始めよう

フルリモート案件を 無料登録した方限定で配信中

目次

1.Python tkinterの概要

tkinterとは

Python3 tkinterのインストールについて

tkinterの動作確認

tkinterが使えない(No module named 'tkinter')の対策

tkinter以外のGUIライブラリ

PyQt

WxPython

Kivy

拡張モジュール「ttk」

2.そもそもGUIアプリ・ツールとは

GUIとは

GUIのメリット3つ

操作性の向上

処理状況の可視化

アプリ・ツールの利便性向上

GUIのウィジェットとは

3.tkinterのメリット・デメリット

メリット

デメリット

4.tkinterチュートリアル

5.メイン画面(root)の操作

タイトル設定(root.title)

ウィンドウサイズ設定(root.geometry)

ウィンドウサイズ変更 可否(root.resizable)

ウィンドウ最大サイズ設定(root.maxsize)

ウィンドウ最小サイズ設定(root.minsize)

ウィンドウ属性設定(root.configure)

イベントループ開始(root.mainloop)

6.ウィジェットのレイアウト方法

pack:ソースコードの記載順にウィジェット配置

grid:行と列を指定したウィジェット配置

place:座標を指定したウィジェット配置

7.tkinterでよく使用される10個のウィジェット

①Label(ラベル):テキスト表示

②Button(ボタン):ボタン表示

③Entry(エントリー):改行なしテキストボックス

④Text(テキスト):改行ありテキストフィールド

⑤CheckButton(チェックボタン):複数選択可のチェックボックス

⑥Radiobutton(ラジオボタン):1つだけ選べるボックス

⑦Scale(スケール):スライダー表示

⑧Frame(フレーム):ウィジェットのグループ化

⑨Canvas(キャンバス):画像表示

⑩Menu(メニュー):ウィンドウにメニュー追加

8.イベント処理の方法

tkinterのイベント処理

tkinterのイベントの種類

マウスイベント

キーボードイベント

フォーカスイベント

その他

9.ダイアログの使い方

メッセージボックス

ファイルダイアログ

10.まとめ