PythonでGUIアプリを作成できるモジュール tkinter(ティーキンター)の使い方を解説します。
この記事を読めば基本的な操作方法をマスターできるようになります。
目次
使用モジュール
tkinter は Python標準モジュールのためインストールは不要です。
インストール:不要
tkinterとは
簡単にGUIを作成することができるツールキットで、GUI画面 から Python スクリプトを実行することができます。
試しに以下のコードを、普段使用しているエディタにコピペして実行してみて下さい。
1 2 3 4 | from tkinter import * root = Tk() root.mainloop() |
これだけで下のような画面が作成できます。

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

上の画面を作成するコードは以下のようになっています。
(スクリプトと同じディレクトリにpython_logo.pngが必要です。)
コードの解説は後述しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | from tkinter import * def click_btn_2a(): button_2a['text'] = 'クリックしました' if __name__ == '__main__': root = Tk() # この下に画面構成を記述 # ----------- ①Window作成 ----------- # root.title('tkinterの使い方') # 画面タイトル設定 root.geometry('500x500') # 画面サイズ設定 root.resizable(False, False) # リサイズ不可に設定 # ----------- ②Frameを定義 ----------- # frame1 = Frame(root, width=250, height=100, borderwidth=2, relief='solid') frame2 = Frame(root, width=250, height=100, borderwidth=2, relief='solid') frame3 = Frame(root, width=500, height=200, borderwidth=2, relief='solid') frame4 = Frame(root, width=250, height=200, borderwidth=2, relief='solid') frame5 = Frame(root, width=250, height=200, borderwidth=2, relief='solid') # Frameサイズを固定 frame1.propagate(False) frame2.propagate(False) frame3.propagate(False) frame4.propagate(False) frame5.propagate(False) # Frameを配置(grid) frame1.grid(row=0, column=0) frame2.grid(row=0, column=1) frame3.grid(row=1, column=0, columnspan=2) frame4.grid(row=2, column=0) frame5.grid(row=2, column=1) # ---------- ③Widget配置 ----------- # # label(フレーム1左上) label_1a = Label(frame1, text='ラベルの文字列', font=('', 14), bg = '#ccccff', fg = '#ff0000') label_1b = Label(frame1, text='ラベル左寄せ', font=('System', 14)) label_1a.pack(padx=5, pady=10) label_1b.pack(anchor=W) # Button(フレーム2右上) button_2a = Button(frame2, text='ボタン名変更', command=click_btn_2a) button_2a.pack(padx=5, pady=10) # テキストボックス(フレーム2右上) entry_2b = Entry(frame2, width=14) text = StringVar() button_2b = Button(frame2, text='文字列コピー', command=lambda: text.set(entry_2b.get())) label_2b = Label(frame2, textvariable=text, font=('System', 14)) entry_2b.pack(side=LEFT) button_2b.pack(side=LEFT) label_2b.pack(side=LEFT) # 画像表示 (フレーム3中央) image = PhotoImage(file='./python_logo.png') label_3 = Label(frame3, image=image) label_3.pack(pady=20) # Canvas配置(フレーム4左下) canvas = Canvas(frame4,width=250,height=200) canvas.create_rectangle(0, 0, 250, 200, fill = 'white') canvas.pack() # Canvas操作用ボタン(フレーム5右下) button_5a = Button(frame5, text='描く', width=15, command=lambda: canvas.create_rectangle(10, 10, 140, 140, tag='rect')) button_5a.pack(padx=5, pady=10) button_5b = Button(frame5, text='削除', width=15, command=lambda: canvas.delete('rect')) button_5b.pack(padx=5, pady=10) root.mainloop() |
サンプルコードを順に解説していきます。
モジュールのインポート
1 | from tkinter import * |
tkinter をインポートします。import *
とすることで、メソッド呼び出し時のオブジェクト名 Tk.
を省略する事ができます。
Window作成
1 2 3 4 5 | root = Tk() # この間に画面構成を記述 root.mainloop() |
Tk()
はクラス Tk のインスタンス(オブジェクト)を生成して返します。この root
が画面上のメインウィンドウに対応します。
メインウィンドウを作成した後に、ラベルやボタンなどのウィジェットを配置していきます。
最後に root.mainloop()
でイベントループを開始して、ユーザーからの要求(イベント)を処理します。
Window設定
1 2 3 | root.title('tkinterの使い方') # 画面タイトル設定 root.geometry('500x500') # 画面サイズ設定 root.resizable(False, False) # リサイズ設定 |
画面サイズ設定は 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=縦サイズ)
になります。
1 2 3 4 5 | frame1 = Frame(root, width=250, height=100, borderwidth=2, relief='solid') frame2 = Frame(root, width=250, height=100, borderwidth=2, relief='solid') frame3 = Frame(root, width=500, height=200, borderwidth=2, relief='solid') frame4 = Frame(root, width=250, height=200, borderwidth=2, relief='solid') frame5 = Frame(root, width=250, height=200, borderwidth=2, relief='solid') |
このサンプルでは Frame 領域を分かりやすくするために、relief
で枠線スタイルを指定しています。デフォルトでは枠線は表示されません。また borderwidth
で枠線の太さを指定しています。
Frameサイズを固定 (propagate)
Frame はデフォルトではボタンなどのWidgetに合わせて、サイズを自動で縮小拡大します。
自動で変更されたくない場合は、propagate(False)
を指定してサイズを固定できます。
1 2 3 4 5 6 | # フレームサイズを固定 frame1.propagate(False) frame2.propagate(False) frame3.propagate(False) frame4.propagate(False) frame5.propagate(False) |
この例では Widget を pack
で配置していますが、grid
で配置する場合は grid_propagate(False)
を使用してください。
Frameを配置 (grid)
先程定義した Frame を
で Window に配置します。grid(row=行位置, column=列位置)
frame3
は 2列分を結合した Frame とするために、columnspan=2
と指定しています。
1 2 3 4 5 6 | # フレームを配置(grid) frame1.grid(row=0, column=0) frame2.grid(row=0, column=1) frame3.grid(row=1, column=0, columnspan=2) frame4.grid(row=2, column=0) frame5.grid(row=2, column=1) |
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進数」もしくは「色名」で指定します。省略するとデフォルトの背景色無し、文字色黒になります。
1 2 3 4 | # label(フレーム左上) label_1a = Label(frame1, text='ラベルの文字列', font=('', 14), bg = '#ccccff', fg = '#ff0000') label_1b = Label(frame1, text='ラベル左寄せ', font=('System', 14)) |
設定したラベルを pack
で配置します。
1 2 | label_1a.pack() label_1b.pack(padx=5, pady=10, anchor=W) |
label_1a.pack()
のように引数を省略すると、デフォルトの設定で中央配置・パディング(隙間)無しで設定されます。padx
, pady
は外側の横・縦の隙間を指定、anchor
は配置位置を指定しています。
ラベルについては以下の記事で詳しく解説しています。
・関連記事:【Python/tkinter】Label(ラベル)の使い方
ボタン(Button)
frame2(右上)の 上側のボタンを配置します。
ボタンを押すと、ボタンのテキストが「クリックしました」に変わります。

ボタンは Button(Frameオブジェクト, text='', command=動作させる関数)
で指定します。
ここではボタンを押した時に、ボタンの文字を変更する関数を指定しています。
1 2 | button_2a = Button(frame2, text='ボタン名変更', command=click_btn_2a) button_2a.pack(padx=5, pady=10) |
ボタンを押した時に動作させる関数は以下になります。
1 2 | def click_btn_2a(): button_2a['text'] = 'クリックしました' |
ボタンについては以下の記事で詳しく解説しています。
・関連記事:【Python/tkinter】Button(ボタン)の使い方
テキストボックス(Entry)
frame2(右上)のテキストボックス・ボタン・ラベルを配置します。
テキストボックスにテキストを入力してボタンを押すと、右側のラベルにコピーされます。

1 2 3 4 5 6 7 | entry_2b = Entry(frame2, width=14) text = StringVar() button_2b = Button(frame2, text='文字列コピー', command=lambda: text.set(entry_2b.get())) label_2b = Label(frame2, textvariable=text, font=('System', 14)) entry_2b.pack(side=LEFT) button_2b.pack(side=LEFT) label_2b.pack(side=LEFT) |
まずテキストボックスを Entry()
で設定します。
1 | entry_2b = Entry(frame2, width=14) |
テキストボックスの値を動的に取得するために、文字列を保持する StringVar()
を変数 text
として設定します。
1 | text = StringVar() |
次にボタンの設定を行います。command
には、引数付き関数 text.set(entry_2b.get())
を指定したいため、lambda
関数を使用する必要があります。
1 | button_2b = Button(frame2, text='文字列コピー', cursor='hand2', command=lambda: text.set(entry_2b.get())) |
entry_2b.get()
でテキストボックスに入力された文字列を取得し、その文字列を text.set()
で変数 text
に文字列を格納します。
最後に文字列を表示するラベルを設定します。
固定の文字列を表示するラベルでは引数 text に文字列を指定しますが、動的に変化させたい場合は引数 textvariable
に変数を指定します。
ここでは、先程設定した text
を指定しています。
1 | label_2b = Label(frame2, textvariable=text, font=('System', 14)) |
これで ボタンを押す→テキストボックスの文字列を取得→ラベルに文字列を表示 という流れができました。
そして、設定した Widget を pack()
を使用して配置していきます。
1 2 3 | entry_2b.pack(side=LEFT) button_2b.pack(side=LEFT) label_2b.pack(side=LEFT) |
1行に3つの Widget を並べるために、引数 side=LEFT
を指定して、左詰めに配置していきます。
デフォルトでは上詰めで縦方向に並んでいきます。
Entryについては以下の記事で詳しく解説しています。
・関連記事:【Python/tkinter】Entry(エントリー)の使い方
画像表示(Photoimage)
frame3(中央)に画像を表示させます。

画像は PhotoImage
で読み込み、ラベルのオプション image
で画像を指定することで表示できます。
1 2 3 | image = PhotoImage(file='./python_logo.png') label_3 = Label(frame3, image=image) label_3.pack(pady=20) |
図形描画(Canvas)
frame4(左下) に図形を描画するキャンバスを設定して、ボタン(右下)で図形を描画・削除させます。

キャンバスは Canvas(Frameオブジェクト, width=幅, height=高さ)
で設定します。
ここでは、背景となる白のキャンバスも create_rectangle(横位置基準, 縦位置基準, 幅, 高さ)
で作成しています。
1 2 3 | canvas = Canvas(frame4,width=250,height=200) canvas.create_rectangle(0, 0, 250, 200, fill = 'white') canvas.pack() |
次に Frame5 に描画と削除を実行するボタンを設定します。create_rectangle()
の引数 tag
を設定しておくと、delete()
でその tag
を指定するだけで簡単に削除できます。
1 2 3 4 5 6 7 | button_5a = Button(frame5, text='描く', width=15, command=lambda: canvas.create_rectangle(10, 10, 140, 140, tag='rect')) button_5a.pack(padx=5, pady=10) button_5b = Button(frame5, text='削除', width=15, command=lambda: canvas.delete('rect')) button_5b.pack(padx=5, pady=10) |
Canvasの使い方についてはこちらの記事で詳しく解説しています。
・関連記事:【Python/tkinter】Canvas(キャンバス)の使い方
以上でプログラムの解説は終了です。
PythonでGUIアプリを作成できるモジュールtkinter(ティーキンター)の使い方を解説しました。
ぜひ活用して業務の効率化などにお役立てください。