tkinter は python 標準のライブラリです。
という方、tkinterはライブラリの追加インストールが不要なので、GUI入門にはピッタリです。
まずは試してみてはいかがでしょうか。
最初に
tkinterとは
Wikipediaによると、、、
Tkinter は Python からGUIを構築・操作するための標準ライブラリ(ウィジェット・ツールキット)である。
Tcl/Tk の Tk 部分を Python で利用できるようにしたもので、使い方も可能な限り Tcl/Tk にあわせられるように作られている。
「Tkinter」『フリー百科事典 ウィキペディア日本語版』より。
2019年12月29日 (日) 13:02 UTC
URL: https://ja.wikipedia.org/wiki/Tkinter
Tk は Took Kit の略で、 GUI に必要な要素(ボタンやテキストボックスなど)を提供しているライブラリです。
Tkinterの特徴として、
- ライブラリのインストールが不要
- Python標準のため、参考とする書籍やWebサイトなどが充実している
- 起動が早い
などが挙げられます。
※参考までに、Python の他のGUIライブラリをまとめた記事がありますので、併せてご覧いただければと思います。
【python】GUIライブラリ13個を比較【初心者にオススメもあります】
pythonでGUIアプリを作ってみる【Tkinter編】
開発環境
- OS Windows 10
- Pythonバージョン 3.8.0
使用するライブラリ
GUIを作るだけなら、「Tkinter」だけでOKです。
※Tkinter は python標準のため、追加のライブラリのインストールは不要です。
サンプルプログラム 基礎:GUIの表示
まずは何も考えず、画面だけ表示するプログラムを作ってみます。
ソースコード
import tkinter #tkinter ライブラリのインポート root = tkinter.Tk() #Tkオブジェクト生成 root.title(u"テストその1") #GUIのタイトル名の決定 root.geometry("300x300") #画面の大きさの決定 root.mainloop() #イベントループ
コメントを見てもらえれば、ほぼ理解できるかと思います。
最後の7行目だけ補足をすると、これは、画面を表示し、指令(ボタンのクリックなど)を待つ処理となります。
こちらの mainloop メソッドを実行することで、はじめて画面が表示されます。
以上の、
- tkinter ライブラリのインポート(1行目)
- Tkオブジェクト生成(3行目)
- GUIの設定(4,5行目)※作りたい画面に応じて設定
- イベントループ(7行目)
が、 tkinter でGUIを作る場合の基本の型となります。
実行結果
C# や、 C の OpenGL で画面を作ったことはありますが、デフォルトのライブラリでもこんなに短くGUIが作れるのですね!
サンプルプログラム 少し応用:matplotlibとの連携
ちょっと応用編ということで、
- GUIのテキストボックスに入力したファイルを読み込み、
- GUI上にグラフを描画させる
ようなプログラムを作りたいと思います。
matplotlib を Canvas と紐づけてグラフを画面に表示させます。
ソースコード
import tkinter #GUIライブラリ import matplotlib.pyplot as plt #グラフ描画ライブラリ from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg #tkinterとCanvasを紐づけるライブラリ import numpy as np #数値計算ライブラリ from functools import partial #終了処理 def Quit(): root.quit() root.destroy() #ファイルのプロット処理 def PlotFile(canvas, ax, colors = "gray"): editBoxValue = FileEditBox.get() if editBoxValue != '': FileEditBox.delete(0, tkinter.END) ax.cla() #前の描画データの削除 x,y = np.loadtxt("./" + editBoxValue, delimiter = ',', skiprows = 1, unpack = True) #データ読み込み ax.set_aspect('equal') #アスペクト比をそろえる ax.plot(x, y) #グラフの描画 canvas.draw() #Canvasへ描画 if __name__ == "__main__": try: #tkinterオブジェクト生成 root = tkinter.Tk() root.title("ほげほげ") #GUIタイトル #graphの設定 fig,ax1 = plt.subplots() fig.gca().set_aspect('equal', adjustable = 'box') #Canvas設定 Canvas = FigureCanvasTkAgg(fig, master = root) #Canvasにfigを追加 Canvas.get_tk_widget().grid(row = 0, column = 0, rowspan = 10) #EditBox FileEditBox = tkinter.Entry(width = 15) FileEditBox.grid(row = 1, column = 1) #UPDATEボタン ButtonWidth = 15 UpdateButton = tkinter.Button(text="UPDATE", width=ButtonWidth, command=partial(PlotFile, Canvas, ax1))#ボタンの生成 UpdateButton.grid(row = 2, column = 1, columnspan = 1)#描画位置 #QUITボタン QuitButton = tkinter.Button(text = "QUIT", width = ButtonWidth, command = Quit) #QUITボタンオブジェクト生成 QuitButton.grid(row = 4, column = 1, columnspan = 1) #Quitボタン位置設定 #Canvasの描画 PlotFile(Canvas, ax1) #描画を継続 root.mainloop() except: import traceback traceback.print_exc() finally: input(">>")
基本的にコピペで動くはず。
try と except 、finally は例外処理です。(try の部分だけ書けば動きます。)
テキストボックスやボタンなど、GUI を構成する要素を Widget といいますが、今回は、
- グラフを表示する Canvas ウィジェット
- ファイルを入力する Entry ウィジェット(テキストボックス)
- 描画や終了などの指示をする Button ウィジェット
を使用しています。
これらの Widget を、Grid メソッドを使い、画面に配置しています。
Widget や Grid メソッドの詳細については、次の記事をご参考いただければと思います。
入力ファイル
※ソースファイルと同じディレクトリに配置
x,y 1,0.1 2,0.4 3,0.9 4,1.6 5,2.5 6,3.6 7,4.9 8,6.4 9,8.1 10,10
実行結果
・初期表示
・テキストボックスに「hoge.csv」と入力して、「UPDATE」押下。
無事にグラフが表示されましたー^^
■ご参考にさせていただいたサイト
「MatplotlibにGUI(Tkinter)を組み合わせる話」(Shts!様)
使ってみた感想
Tkinter でGUIアプリを作ることができました。
一般的なエクセルマクロなどで作れるようなGUIなら問題なく作れそうな気がします。
本格的に学びたいかたは、下記の書籍でも取り扱っているので、ご覧いただければと思います。