PythonでGUIアプリを作成できるモジュール tkinter(ティーキンター)の使い方を解説します。
この記事を読めば基本的な操作方法をマスターできるようになります。
tkinterとは
簡単にGUIを作成することができるツールキットで、GUI画面 から Python スクリプトを実行することができます。
Python では広く一般的に使用されているライブラリです。
試しに以下のコードを、普段使用しているエディタにコピペして実行してみて下さい。
1 2 3 4 | from tkinter import * root = Tk() root.mainloop() |
これだけで下のような画面が作成できます。画面は「×」を押して閉じることができます。
作成した画面は実行ファイルに変換(exe化)して配布することも可能です。
実行ファイル作成方法についてはこちらの記事を参考にしてください
・【Python】PyInstallerでPythonスクリプトをexe化
使用モジュール
tkinter は Python標準モジュールのためインストールは不要です。
インストール:不要
tkinterの構造
tkinter では、GUI画面をツリー状の階層構造を構成するように作成します。
基本的な順序は ①Window作成 ②Frame設定・配置 ③Widget設定・配置 の順になります。ボタンやラベルなどのオブジェクトを Widget(ウィジェット)と呼び、Widget を入れる箱を Frame(フレーム)と呼びます。
FrameやWidgetの使い方については、別の記事で詳細に解説しています。
【Frame設定】
・【Python tkinter】Frameの使い方
【Widget設定】
・【Python/tkinter】Label(ラベル)の使い方
・【Python/tkinter】Button(ボタン)の使い方
・【Python/tkinter】Entry(エントリー)の使い方
・【Python/tkinter】Canvas(キャンバス)の使い方
【配置】
・【Python/tkinter】Widgetの配置(grid)
・【Python/tkinter】Widgetの配置(pack)
・【Python/tkinter】Widgetの配置(place)
上の画面を作成するコードは以下のようになっています。コードの解説は後述します。
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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | from tkinter import * def click_btn_2a(): button_2a['text'] = 'クリックしました' def selected(): indices = lst_b.curselection() selections = '\n'.join([lst_b.get(i) for i in indices]) sel_v.set(f'{selections}') if __name__ == '__main__': root = Tk() # この下に画面構成を記述 # ----------- ①Window作成 ----------- # root.title('tkinterの使い方') # 画面タイトル設定 root.geometry('750x450') # 画面サイズ設定 root.resizable(False, False) # リサイズ不可に設定 # ----------- ②Frameを定義 ----------- # frame1 = Frame(root, width=250, height=150) # Label frame2 = Frame(root, width=250, height=150) # Button, Entry frame3 = Frame(root, width=250, height=150) # CheckButton frame4 = Frame(root, width=250, height=150) # RadioButton frame5 = Frame(root, width=250, height=150) # Spinbox frame6 = Frame(root, width=250, height=150) # Listbox frame7 = Frame(root, width=250, height=150) # Canvas frame8 = Frame(root, width=250, height=150) # Canvas用ボタン frame9 = Frame(root, width=250, height=150) # Photoimage # Frameサイズを固定 frame1.propagate(False) frame2.propagate(False) frame6.propagate(False) frame7.propagate(False) frame8.propagate(False) frame9.propagate(False) # Frameを配置(grid) frame1.grid(row=0, column=0) frame2.grid(row=0, column=1) frame3.grid(row=0, column=2) frame4.grid(row=1, column=0) frame5.grid(row=1, column=1) frame6.grid(row=1, column=2) frame7.grid(row=2, column=0) frame8.grid(row=2, column=1) frame9.grid(row=2, column=2) # ---------- ③Widget配置 ----------- # # == label(Frame1) == # 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(Frame2) == # button_2a = Button(frame2, text='ボタン名変更', command=click_btn_2a) button_2a.pack(padx=5, pady=10, expand=True) # == Entry(Frame2) == # 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() button_2b.pack() label_2b.pack() # == Checkbutton(Frame3) == # chk_v1 = StringVar() chk_v1.set('0') # 初期化 chk_b1 = Checkbutton(frame3, text='オプション1', variable=chk_v1) chk_v2 = StringVar() chk_v2.set('2未選択') # 初期化 chk_b2 = Checkbutton(frame3, text='オプション2', onvalue='2選択', offvalue='2未選択', variable=chk_v2) # 状態表示ボタン chk_value = StringVar() chk_value.set('') button_chk = Button(frame3, text='状態表示', command=lambda: chk_value.set('%s, %s' % (chk_v1.get(), chk_v2.get()))) # 状態表示ラベル label_chk = Label(frame3, textvariable=chk_value, font=(10)) chk_b1.grid(row=0, column=0) chk_b2.grid(row=0, column=1) button_chk.grid(row=1, column=0, columnspan=2, pady=5) label_chk.grid(row=2, pady=5, columnspan=2) # == Radiobutton(Frame4) == # label_frame = LabelFrame(frame4, text='Options') rad_v1 = StringVar() rad_v1.set('0') rad_b1 = Radiobutton(label_frame, text='オプションA', value='A', variable=rad_v1) rad_b2 = Radiobutton(label_frame, text='オプションB', value='B', variable=rad_v1) rad_value = StringVar() rad_value.set('') button_rad = Button(frame4, text='選択', command=lambda : rad_value.set('%s' % rad_v1.get())) label_rad = Label(frame4, textvariable=rad_value, font=(10)) label_frame.grid(row=0, column=0) rad_b1.grid(row=0, column=0) rad_b2.grid(row=0, column=1) button_rad.grid(row=1, pady=5) label_rad.grid(row=2) # == Spinbox(Frame5) == # spn_v = StringVar() spn_v.set('東京') cities = ['東京', '名古屋', '大阪'] spn_value = StringVar() spn_value.set('東京') spin = Spinbox(frame5, state='readonly', textvariable=spn_v, values=cities, command=lambda: spn_value.set('%s' % spn_v.get())) label_spin = Label(frame5, textvariable=spn_value) spin.grid(row=0, column=0, pady=5) label_spin.grid(row=1, column=0) # == Listbox(Frame6) == # countries = ['日本', 'アメリカ', '中国'] lst_v = StringVar(value=countries) lst_b = Listbox(frame6, listvariable=lst_v, selectmode='multiple', height=4) button_lst = Button(frame6, text='選択', command=selected) sel_v = StringVar('') label_lst = Label(frame6, textvariable=sel_v) lst_b.pack(side='left', padx=5) button_lst.pack(side='left', padx=5) label_lst.pack(side='left', padx=5) # == Canvas(Frame7) == # canvas = Canvas(frame7, width=250, height=200) canvas.create_rectangle(0, 0, 250, 200, fill='white') canvas.pack() # == Canvas操作用ボタン(Frame8) == # button_8a = Button(frame8, text='描く', width=15, command=lambda: canvas.create_rectangle(10, 10, 140, 140, tag='rect')) button_8a.pack(padx=5, pady=10) button_8b = Button(frame8, text='削除', width=15, command=lambda: canvas.delete('rect')) button_8b.pack(padx=5, pady=10) # 画像表示 (Frame9) == # image = PhotoImage(file='./python_logo.png') label_9 = Label(frame9, image=image) label_9.pack(pady=20) 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 4 | # ----------- ①Window作成 ----------- # root.title('tkinterの使い方') # 画面タイトル設定 root.geometry('750x450') # 画面サイズ設定 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 6 7 8 9 10 | # ----------- ②Frameを定義 ----------- # frame1 = Frame(root, width=250, height=150) # Label frame2 = Frame(root, width=250, height=150) # Button, Entry frame3 = Frame(root, width=250, height=150) # Checkbutton frame4 = Frame(root, width=250, height=150) # Radiobutton frame5 = Frame(root, width=250, height=150) # Spinbox frame6 = Frame(root, width=250, height=150) # Listbox frame7 = Frame(root, width=250, height=150) # Canvas frame8 = Frame(root, width=250, height=150) # Canvas用ボタン frame9 = Frame(root, width=250, height=150) # Photoimage |
Frameサイズを固定 (propagate)
Frame は、デフォルトではボタンなどのWidgetに合わせてサイズを自動で縮小拡大します。
自動で変更されたくない場合は propagate(False)
を指定してサイズを固定できます。
1 2 3 4 5 6 7 | # Frameサイズを固定 frame1.propagate(False) frame2.propagate(False) frame6.propagate(False) frame7.propagate(False) frame8.propagate(False) frame9.propagate(False) |
この例では Widget を pack
で配置していますが、grid
で配置する場合は grid_propagate(False)
を使用してください。
Frameを配置 (grid)
先程定義した Frame を
で Window に配置します。grid(row=行位置, column=列位置)
1 2 3 4 5 6 7 8 9 10 | # Frameを配置(grid) frame1.grid(row=0, column=0) frame2.grid(row=0, column=1) frame3.grid(row=0, column=2) frame4.grid(row=1, column=0) frame5.grid(row=1, column=1) frame6.grid(row=1, column=2) frame7.grid(row=2, column=0) frame8.grid(row=2, column=1) frame9.grid(row=2, column=2) |
grid の詳細についてはこちらの記事で解説しています。
・関連記事:【Python/tkinter】Widgetの配置(grid)
Widget設定・配置
ラベルやボタンなどのWidgetを設定・配置していきます。
サンプルで使用しているgrid, pack の詳細についてはこちらの記事で解説しています。
・関連記事:【Python/tkinter】Widgetの配置(grid)
・関連記事:【Python/tkinter】Widgetの配置(pack)
grid, pack以外にもplaceで配置する方法もあります。
・関連記事:【Python/tkinter】Widgetの配置(place)
ラベル(Label)
frame1にラベルを配置していきます。
1 2 3 4 5 6 | # ---------- ③Widget配置 ----------- # # == label(Frame1) == # 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) |
ポイントを解説します。
1 2 | label_1a = Label(frame1, text='ラベルの文字列', font=('', 14), bg='#ccccff', fg='#ff0000') label_1b = Label(frame1, text='ラベル左寄せ', font=('System', 14)) |
Label()
でラベルのスタイルを設定します。
背景色は「16進数」もしくは「色名」で指定します。省略するとデフォルトの背景色無し、文字色黒になります。
1 2 | label_1a.pack() label_1b.pack(padx=5, pady=10, anchor=W) |
設定したラベルを pack
で配置します。label_1a.pack()
のように引数を省略すると、デフォルトの設定で中央配置・パディング(隙間)無しで設定されます。padx
, pady
は外側の横・縦の隙間を指定、anchor
は配置位置を指定しています。
ラベルについては以下の記事で詳しく解説しています。
・関連記事:【Python/tkinter】Label(ラベル)の使い方
ボタン(Button)
frame2の上側のボタンを配置します。
ボタンを押すと、ボタンのテキストが「クリックしました」に変わります。
1 2 3 | # == Button(Frame2) == # button_2a = Button(frame2, text='ボタン名変更', command=click_btn_2a) button_2a.pack(padx=5, pady=10, expand=True) |
引数 command
にボタンの文字を変更する関数を指定しています。
関数は以下になります。(サンプルプログラム3~4行目)
1 2 | def click_btn_2a(): button_2a['text'] = 'クリックしました' |
ボタンについては以下の記事で詳しく解説しています。
・関連記事:【Python/tkinter】Button(ボタン)の使い方
テキストボックス(Entry)
frame2にテキストボックス・ボタン・ラベルを配置します。
テキストボックスにテキストを入力してボタンを押すと、下のラベルに文字列がコピーされます。
1 2 3 4 5 6 7 8 9 | # == Entry(Frame2) == # 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() button_2b.pack() label_2b.pack() |
ポイントを解説します。
1 | entry_2b = Entry(frame2, width=14) |
まずテキストボックスを Entry()
で設定します。
1 | text = StringVar() |
テキストボックスの値を動的に取得するために、文字列を保持するWidget変数StringVar()
を変数 text
として設定します。
次にボタンの設定を行います。
1 | button_2b = Button(frame2, text='文字列コピー', cursor='hand2', command=lambda: text.set(entry_2b.get())) |
command
には、引数付き関数 text.set(entry_2b.get())
を指定したいため、lambda
関数を使用する必要があります。
entry_2b.get()
でテキストボックスに入力された文字列を取得し、その文字列をtext.set()
で変数 text
に文字列を格納します。
最後に文字列を表示するラベルを設定します。
1 | label_2b = Label(frame2, textvariable=text, font=('System', 14)) |
固定の文字列を表示するラベルでは引数text
に文字列を指定しますが、動的に変化させたい場合は引数 textvariable
にWidget変数を指定します。
これで、ボタンを押す→テキストボックスの文字列を取得→ラベルに文字列を表示 という流れができました。
Entryについては以下の記事で詳しく解説しています。
・関連記事:【Python/tkinter】Entry(エントリー)の使い方
チェックボタン(Checkbutton)
frame3にチェックボックスを配置します。
合わせて選択状態を表示するためのボタンとラベルを配置します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # == Checkbutton(Frame3) == # chk_v1 = StringVar() chk_v2 = StringVar() chk_v1.set('0') chk_v2.set('未選択') check_a = Checkbutton(frame3, text='オプション1', variable=chk_v1) check_b = Checkbutton(frame3, text='オプション2', onvalue='選択', offvalue='未選択', variable=chk_v2) # 状態表示ボタン chk_text = StringVar() chk_text.set('') button_chk = Button(frame3, text='状態表示', command=lambda: chk_text.set('オプション1:%s\nオプション2:%s' % (chk_v1.get(), chk_v2.get()))) # 状態表示ラベル label_chk = Label(frame3, textvariable=chk_text, font=(10)) check_a.grid(row=0, column=0) check_b.grid(row=0, column=1) button_chk.grid(row=1, column=0, columnspan=2, pady=5) label_chk.grid(row=2, pady=5, columnspan=2) |
ポイントを解説します。
1 2 | chk_v1 = StringVar() chk_v2 = StringVar() |
チェックボックスの状態設定用の変数を設定します。
選択状態を動的に取得するために、文字列を保持するWidget変数StringVarを、チェック数分の設定します。(chk_v1:オプション1用、chk_v2:オプション2用)
1 2 | chk_v1.set('0') chk_v2.set('未選択') |
設定した変数の初期状態を設定します。
チェックボックスの状態値はデフォルトではチェックOFF:0、チェックON:1になります。
ここではオプション2を、未選択↔選択 となるように設定します。
1 2 | check_a = Checkbutton(frame3, text='オプション1', variable=chk_v1) check_b = Checkbutton(frame3, text='オプション2', onvalue='選択', offvalue='未選択', variable=chk_v2) |
変数の設定ができたらCheckbutton()
で設定します。
チェックON/OFF時の値を変更するには引数onvalue=選択時文字列
,offvalue=未選択時文字列
を指定します。
ボタン、ラベルについては上述の解説を参考にしてください。
・8.1 ラベル(Label)
・8.2 ボタン(Button)
配置についてはこちらの記事を参考にしてください。
・関連記事:【Python/tkinter】Widgetの配置(grid)
ラジオボタン(Radiobutton)
frame4にラジオボタンを配置します。
合わせて選択状態を表示するためのボタンとラベルを配置します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # == Radiobutton(Frame4) == # rad_v = StringVar() rad_v.set('0') label_frame = LabelFrame(frame4, text='Options') radio_a = Radiobutton(label_frame, text='オプションA', value='A', variable=rad_v) radio_b = Radiobutton(label_frame, text='オプションB', value='B', variable=rad_v) # 選択ボタン, ラベル rad_text = StringVar() rad_text.set('') button_rad = Button(frame4, text='選択', command=lambda : rad_text.set('%s' % rad_v.get())) label_rad = Label(frame4, textvariable=rad_text, font=(10)) label_frame.grid(row=0, column=0) radio_a.grid(row=0, column=0) radio_b.grid(row=0, column=1) button_rad.grid(row=1, pady=5) label_rad.grid(row=2) |
ポイントを解説します。
1 2 | rad_v = StringVar() rad_v.set('0') |
ラジオボタンの状態設定用の変数を設定します。
選択状態を動的に取得するために、文字列を保持するWidget変数StringVarオブジェクトをrad_v
として設定します。
1 | label_frame = LabelFrame(frame4, text='Options') |
LabelFrameというラベルとフレームがセットになったWidgetを設定します。
このWidgetは、グループ単位で一括処理を実行することができます。
このFrame内にラジオボタンの選択肢を配置させます。
1 2 | radio_a = Radiobutton(label_frame, text='オプションA', value='A', variable=rad_v) radio_b = Radiobutton(label_frame, text='オプションB', value='B', variable=rad_v) |
Radiobutton()
でラジオボタンをLabelFrame内のWidgetとして設定します。
選択時の値をvalue
に設定、値を格納する変数をvariable
に設定します。
ボタン、ラベルについては上述の解説を参考にしてください。
・8.1 ラベル(Label)
・8.2 ボタン(Button)
配置についてはこちらの記事を参考にしてください。
・関連記事:【Python/tkinter】Widgetの配置(grid)
スピンボックス(Spinbox)
frame5にスピンリストと合わせて選択状態を表示するためのラベルを配置します。
1 2 3 4 5 6 7 8 | # == Spinbox(Frame5) == # cities = ['東京', '名古屋', '大阪'] spn_v = StringVar() spn_v.set('東京') spinbox = Spinbox(frame5, state='readonly', textvariable=spn_v, values=cities) label_spin = Label(frame5, textvariable=spn_v) spinbox.grid(row=0, column=0, pady=5) label_spin.grid(row=1, column=0) |
ポイントを解説します。
1 2 3 | cities = ['東京', '名古屋', '大阪'] spn_v = StringVar() spn_v.set('東京') |
選択状態を動的に取得するために、文字列を保持するWidget変数StringVarをspn_v
として設定し、spn_v.set()
でスピンボックスに表示する初期値を設定します。
1 | spinbox = Spinbox(frame5, state='readonly', textvariable=spn_v, values=cities) |
Spinbox()
でframe5に配置するWidgetとして設定します。textvariable
に、選択した値を格納するために文字列変数spn_v
を指定します。
1 | label_spin = Label(frame5, textvariable=spn_v) |
スピンボックスで選択した値を表示するラベルを設定します。
値は動的なのでtextvariable
にWidget変数spn_v
を設定しています。
配置についてはこちらの記事を参考にしてください。
・関連記事:【Python/tkinter】Widgetの配置(grid)
リストボックス(Listbox)
frame6にリストボックス、選択値を表示させるボタンとラベルを配置します。
1 2 3 4 5 6 7 8 9 10 | # == Listbox(Frame6) == # countries = ['日本', 'アメリカ', '中国'] lst_v = StringVar(value=countries) listbox = Listbox(frame6, listvariable=lst_v, selectmode='multiple', height=4) button_lst = Button(frame6, text='選択', command=selected) sel_v = StringVar('') label_lst = Label(frame6, textvariable=sel_v) listbox.pack(side='left', padx=5) button_lst.pack(side='left', padx=5) label_lst.pack(side='left', padx=5) |
ポイントを解説します。
1 2 | countries = ['日本', 'アメリカ', '中国'] lst_v = StringVar(value=countries) |
リストボックスに表示する選択肢をcountries
にリストで設定します。
リストボックス用のWidget変数としてlst_v
をStringVarで設定します。引数value
に選択肢リストを指定するのがポイントです。
1 | listbox = Listbox(frame6, listvariable=lst_v, selectmode='multiple', height=4) |
Listbox()
をframe6のWidgetとして設定します。リスト表示文字列listvariable
にWidget変数、項目選択方法を設定するselectmode
で複数選択モードの'multiple'
を指定しています。
1 | button_lst = Button(frame6, text='選択', command=selected) |
リスト選択値を取得するボタンを設定します。command
に以下のselected
関数を指定しています。(サンプルプログラム6~9行目)
1 2 3 4 | def selected(): indices = listbox.curselection() selections = '\n'.join([listbox.get(i) for i in indices]) sel_v.set(f'{selections}') |
listbox.cureselection()で選択された行番号をindices
(タプル)として取得した後、文字列をlistbox.get(行番号)
で取得、選択数分forで繰り返し、改行(’/n’)で結合しています。
配置についてはこちらの記事を参考にしてください。
・【Python/tkinter】Widgetの配置(pack)
図形描画(Canvas)
frame7 に図形を描画するキャンバス、frame8に図形を描画・削除させるボタンを配置します。
キャンバスは Canvas(Frameオブジェクト, width=幅, height=高さ)
で設定します。
ここでは、背景となる白のキャンバスも create_rectangle(横位置基準, 縦位置基準, 幅, 高さ)
で作成しています。
1 2 3 4 | # == Canvas(Frame7) == # canvas = Canvas(frame7, width=250, height=200) canvas.create_rectangle(0, 0, 250, 200, fill='white') canvas.pack() |
次に Frame8 に描画と削除を実行するボタンを設定します。create_rectangle()
の引数 tag
を設定しておくと、delete()
でその tag
を指定するだけで簡単に削除できます。
1 2 3 4 5 6 7 | # == Canvas操作用ボタン(Frame8) == # button_8a = Button(frame8, text='描く', width=15, command=lambda: canvas.create_rectangle(10, 10, 140, 140, tag='rect')) button_8a.pack(padx=5, pady=10) button_8b = Button(frame8, text='削除', width=15, command=lambda: canvas.delete('rect')) button_8b.pack(padx=5, pady=10) |
Canvasの使い方についてはこちらの記事で詳しく解説しています。
・関連記事:【Python/tkinter】Canvas(キャンバス)の使い方
画像表示(Photoimage)
frame9に画像を表示させます。
画像はPhotoImage
で読み込み、ラベルのオプションimage
で画像を指定することで表示できます。
1 2 3 4 | # 画像表示 (フレーム3中央) image = PhotoImage(file='./python_logo.png') label_3 = Label(frame3, image=image) label_3.pack(pady=20) |
配置についてはこちらの記事を参考にしてください。
・【Python/tkinter】Widgetの配置(pack)
以上でプログラムの解説は終了です。
PythonでGUIアプリを作成できるモジュールtkinter(ティーキンター)の使い方を解説しました。
ぜひ活用して業務の効率化などにお役立てください。