【Python/Tkinter】GUIアプリ入門

Python用モジュール「Tkinter」GUIアプリを作成する方法についてソースコード付きでまとめました。

【はじめに】Tkinterの特徴

TkinterとはPython標準のGUIアプリ作成用モジュールです。
主な特徴は下記の通り。

主な特徴
1 Pythonに標準で付属(他のライブラリと違ってインストール不要)
2 有名なGUIライブラリ「Tk」のPythonバージョン
3 作成したGUIアプリはクロスプラットフォームで動作可能

【画面作成】サイズ設定、タイトル作成

GUIアプリの画面サイズを設定しタイトルを表示します。

# -*- coding:utf-8 -*-
import sys
import tkinter

root = tkinter.Tk()
root.title("タイトル")
root.geometry("400x400")

root.mainloop()

画面タイトルが「エクスカリバー」、タイトル画面サイズが400×400[px]のウインドウが表示されます。

詳細記事
1 【Python/Tkinter】GUIアプリの画面サイズとタイトルの設定

【GUI部品】ステータスバー、ラベル、メニューバー、チェックボックス

ステータスバーの文字を設定し表示します。

# -*- coding:utf-8 -*-
import sys
import tkinter

root = tkinter.Tk()
root.title("タイトル")
root.geometry("300x300")

# ステータスバーの設定
status = tkinter.Label(root, text="にゃんぱすー", borderwidth=2, relief="groove")
status.pack(side=tkinter.BOTTOM, fill=tkinter.X)

root.mainloop()

「text=」にテキストに表示したい文字列を入れます。

詳細記事
1 【Python/Tkinter】ステータスバーの文字設定

画面にラベルを表示します。

# -*- coding:utf-8 -*-
import sys
import tkinter

root = tkinter.Tk()
root.title("タイトル")
root.geometry("300x300")

# ラベルの設定
Static1 = Tkinter.Label(text='にゃんぱすー', foreground='#ff0000', background='#ffaacc')
Static1.place(x=150, y=200)

root.mainloop()
設定内容 修正場所
ラベル名・前景色・背景色の設定 Tkinter.Label(text=’ラベル名’, foreground=’前景のカラーコード’, background=’背景のカラーコード’)
ラベル位置の設定 Static1.place(x=x座標, y=y座標)

変数Static1には、ラベルのハンドルが格納されています。

詳細記事
1 【Python/Tkinter】ラベルの表示設定

入力ボックス(エントリー)を設置します。

# -*- coding:utf-8 -*-
import sys
import tkinter

root = tkinter.Tk()
root.title("タイトル")
root.geometry("300x300")

# エントリーの設定
EditBox = Tkinter.Entry(width=50)
EditBox.insert(Tkinter.END, "最初に表示される文字列")
EditBox.pack()

# エントリーに入力された内容を取得
value = EditBox.get()

root.mainloop()

次の方法でも作成できます。

# -*- coding:utf-8 -*-
import tkinter as tk

root = tk.Tk()
root.title("タイトル")
root.geometry("300x300")

label = tkinter.Label(root, text="名前")
label.pack(side=tkinter.LEFT)
label = tkinter.Entry(root, bd=1)
label.pack(side=tkinter.RIGHT)

root.mainloop()
詳細記事
1 【Python/Tkinter】入力ボックスの設置

メニューバーを作成します。

# -*- coding:utf-8 -*-
import sys
import tkinter

def test():
    print('click')

root = tkinter.Tk()
root.title("タイトル")
root.geometry("300x300")

menubar = tkinter.Menu(root)
filemenu = tkinter.Menu(menubar, tearoff=0)

# ファイルメニュー
filemenu.add_command(label="新規作成", command=test)
filemenu.add_command(label="開く", command=test)
filemenu.add_separator()
filemenu.add_command(label="保存", command=test)
filemenu.add_command(label="名前をつけて保存", command=test)
filemenu.add_command(label="閉じる", command=test)
menubar.add_cascade(label="ファイル", menu=filemenu)

# 編集メニュー
editmenu = tkinter.Menu(menubar, tearoff=0)
editmenu.add_command(label="元に戻す", command=test)
editmenu.add_separator()
editmenu.add_command(label="切り取り", command=test)
editmenu.add_command(label="コピー", command=test)
editmenu.add_command(label="貼り付け", command=test)
editmenu.add_command(label="削除", command=test)
editmenu.add_command(label="全てを選択", command=test)
menubar.add_cascade(label="編集", menu=editmenu)

root.config(menu=menubar)
root.mainloop()

add_cascadeメソッド・・・階層部分を作成
add_commandメソッド・・・コールバック関数を呼び出すメニューを作成
add_separatorメソッド・・・セパレーター(区切り線)を追加

詳細記事
1 【Python/Tkinter】メニューバーの作成

チェックボックス(ボタン)を作成します。

# -*- coding:utf-8 -*-
import tkinter as tk

root = tk.Tk()
root.title("タイトル")
root.geometry("300x300")

intvar1 = tk.IntVar()
check_btn1 = tk.Checkbutton(root, text="リリイ", variable=intvar1, onvalue=1, offvalue=0, height=5, width=20)
check_btn1.pack()

intvar2 = tk.IntVar()
check_btn2 = tk.Checkbutton(root, text="オルタ", variable=intvar2, onvalue=1, offvalue=0, height=5, width=20)
check_btn2.pack()

root.mainloop()

詳細記事
1 【Python/Tkinter】チェックボックス(ボタン)の作成

【ウィジェット】背景画像、図形

画像ウィジェットを背景に配置します。

# -*- coding:utf-8 -*-
import sys
import tkinter

root = tkinter.Tk()
root.title("タイトル")
root.geometry("300x300")

# 画像の取得
img = tkinter.PhotoImage(file='bg.gif')

# 画像ウィジェットの配置(1行1列)
label1 = tkinter.Label(root, image=img)
label1.grid(row=1, column=1)

# 画像ウィジェットの配置(2行2列)
label4 = tkinter.Label(root, image=img)
label4.grid(row=2, column=2)

root.mainloop()

詳細記事
1 【Python/Tkinter】画像を背景に貼り付け

図形(多角形、線)を描画します。

# -*- coding:utf-8 -*-
import sys
import tkinter

root = tkinter.Tk()
root.title("タイトル")
root.geometry("300x300")

# 画像の取得
img = tkinter.PhotoImage(file='bg.gif')

# 描画領域
canvas = tkinter.Canvas(root, bg="white", height=300, width=300)

# 多角形
canvas.create_polygon(10, 10, 10, 100, 100, 100, 100, 10, fill="green")

# 線
canvas.create_line(10, 10, 150, 150, fill='red')
canvas.pack()

root.mainloop()

詳細記事
1 【Python/Tkinter】図形の描画(多角形、線)

【ファイル選択】拡張子の指定機能あり

GUIアプリで重要な機能の1つに「ファイル選択」があります。
Python標準モジュール「Tkinter」では以下のコードで実装できます。

# -*- coding: utf-8 -*-
import os, tkinter, tkinter.filedialog, tkinter.messagebox

root = tkinter.Tk()
root.withdraw()

# 選択候補を拡張子jpgに絞る(絞らない場合は *.jpg → *)
filetype = [("", "*.jpg")]

dirpath = os.path.abspath(os.path.dirname(__file__))
tkinter.messagebox.showinfo('テスト', 'ファイルを選択してください')

# 選択したファイルのパスを取得
filepath = tkinter.filedialog.askopenfilename(filetypes = filetype, initialdir = dirpath)

# 選択したファイル名を表示
tkinter.messagebox.showinfo('テスト', filepath)
詳細記事
1 【Python/Tkinter】ファイル選択の実装(ファイルパスの取得)
関連記事
参考文献 TkinterによるGUIプログラミングPythonのTkinterを使ってみるPython3のtkinterによるクロスプラットフォームGUIアプリ作成入門
内部 【Python/Tkinter】GUIアプリ作成入門【Python】GUIライブラリの比較・おすすめPython入門 基本文法
関連記事