Python/GUIアプリの作成
GUI
編集入門
編集PythonでGUIアプリを作りたいなら、公式サイトからのpythonインストーラーのインストール後に、tkinterパッケージをインストールする必要がある。
tkinterパッケージ(「Tkインターフェース」)は、Tcl/Tk GUIツールキットの標準的なPythonインターフェースです。 Tk と tkinter は共に、macOS を含むほとんどの Unix プラットフォームと Windows システムで利用可能です。
Windows版の公式pythonではpythonインストール時にtkinterも標準インストールされているので、Windowsでは追加のインストール作業は不要である。
しかし、Linuxでは、インストールされていない場合もあるので、下記のようなインストールコマンドでインストールする。
Fedora Linux の場合、
sudo dnf install python3-tkinter
でtkinterがインストールされる。
pythonでは、下記のコードを実行するだけでGUIウィンドウを表示する。
import tkinter root = tkinter.Tk() root.mainloop()
.Tk()
のピリオド「.」の次の英字「T」は、大文字のティー「T」でなければならない(よくあるミスで、これを小文字tにしてしまい、エラーになり実行できないミスが、よくあります)。
ウィンドウの設定
編集# coding: utf-8 import tkinter root = tkinter.Tk() # ここに設定を書く root.title('Hello Window') root.geometry('300x400') root.mainloop()
このように、tkinter.Tk() 以降から mainloopの前までのあいだに命令を書くことで、
ウィンドウの設定を指示できる。
なお、日本語でコメントする場合、環境によってはエラーが起きる場合があるので、その場合には # coding: utf-8
で文字コードを指定する必要がある。
キャンバス
編集図形を描画する前までに、まず描画可能な範囲としてキャンバスを設定しないといけない。
# coding: utf-8 import tkinter root = tkinter.Tk() root.title('Hello Window') root.geometry('300x400') # キャンバスの設定と貼り付け canvasD = tkinter.Canvas(root, width=100, height = 150, bg = "blue") canvasD.place(x=0, y=0) root.mainloop()
tkinter.Canvas
により、キャンバスの設定をできるが、しかし、これだけでは、まだキャンバスは作成されていない(まだ設定しただけ)。
キャンバス設定後には、つづけて 〇〇.place(x=0, y=0)
により、ウィンドウにキャンバスを貼り付ける必要がある。なお、座標は開始位置で、通常設定ならキャンバスの左上の位置。もちろん、(x=0, y=0)とは相対座標で、ウィンドウ内の表示欄の左上を基点とした相対座標。(デスクトップ座標ではない)
なお tkinter.Canvas
の引数のなかにある bg="blue"
とは背景色の設定であり、このコードの場合なら青色 (blue) に設定している。
画像の貼り付け
編集# coding: utf-8 import tkinter root = tkinter.Tk() root.title('Hello Window') root.geometry('800x900') canvasDummy = tkinter.Canvas(root, width = 600, height = 750, bg = "blue") canvasDummy.place(x=0, y=0) # 画像の設定と貼り付け imgD = tkinter.PhotoImage(file="pygra.png") canvasDummy.create_image(0, 0, image=imgD) root.mainloop()
のようになる。
tkinterはPNGに対応している。いっぽう JPEGには対応してないらしい。
.PhotoImage(file="pygra.png")
tkinter.PhotoImage(file="pygra.png")
の
.PhotoImage
は、メソッド名なので、このまま「.PhotoImage」という名前で使う必要がある(ここは変更してはならない)。
いっぽう、
pygra.png
の部分は、読み込みたいファイル名なので、ファイル名に合わせて自由に変更してよい(ただし、ファイル名も一緒に変更して、同じ名前にする必要がある)。
なお、実行ファイルと同じ場所を起点にしているので、この画像ファイルを置くフォルダは、実行ファイルのあるフォルダと同じフォルダに置けばいい。
テキストを座標指定して表示したい場合
編集下記のようにラベルを作成して張り付けるコードで、テキスト文字列を座標指定で表示できる。
# coding: utf-8 import tkinter root = tkinter.Tk() # ここがテキストの座標指定での表示の処理 label = tkinter.Label(root, text = "test string") label.place(x=50, y=30) root.mainloop()
この場合、x座標で50, y座標が30の位置から「Hello World」を表示するプログラムである。
もちろん、canvasやgeometryや画像表示などともラベルは共存できる。
なお、pythonにかぎらず、WindowsのVisual C# などでも、ラベルというモノが定義されており、似たような機能である。
# coding: utf-8 import tkinter root = tkinter.Tk() # ウィンドウの設定 root.title('Hello Window') root.geometry('800x900') # キャンバスの設定と貼り付け canvasDummy = tkinter.Canvas(root, width=600, height=750, bg="blue") canvasDummy.place(x=0, y=0) # ラベル関係 label = tkinter.Label(root, text="test string") label.place(x=50, y=30) root.mainloop()
なお、文字の背景を設定していない場合、ウィンドウ標準色で背景を塗りつぶすので、
結果の画像は、
キャンバスの青色の上に、
灰色みの色の長方形があり、その長方形に「test string」と書かれているだろう。
- 参考文献
python の tkinter の解説書は、とても少ない。
tkinterを勉強できる本として比較的にオススメなのは、日本では『12歳からはじめるゼロからのpythonゲームプログラミング教室』(株式会社ラトルズ、2017年5月20日 第1刷発行)に、tkinterの使い方の解説が比較的に詳しく、易しめに書いてある。
いっぽう、オライリー社の『入門 python3』(Bill Luvanovic, 2017年2月3日 初版第6刷)の本を見ても、tkinter のコード例は1個だけで(434ページ目にコードが1個あるだけ)、ロクに使い方の説明が無い。
カットシステム社『やさしい python 入門』(日向俊二、2012年3月10日 初版第1刷 発行)にも、tkinterの使い方の説明があるが、残念なことに、tkinterの解説の部分だけ、やさしくない(この本では後半でtkinterについて、前半のマトメのために説明してるので、あいにくtkinterの節だけ予備知識が多く、やさしくない)。
Linuxの場合のGUIプログラム
編集GUIプログラムに対応しているモジュールをインポートする。
tkinterが、対応している。Windows版のpythonでは、標準設定でpythonインストール時に同時にtkinterも(あくまでWindows版では)インストールされるので、 Linuxでも互換性のため、python製のGUIアプリ作成時にはなるべく tkinter をLinuxでも使うのが望ましいだろう。
linuxの場合、例えば(fedoraの場合なら、)、tkinterのインストールは
sudo dnf install python3-tkinter
のようにコマンド実行する。
まず、GUIプログラム用の該当モジュールを、OS自体にインストールしていないと、プログラム中にtkinterモジュールを使えない。
標準状態ではtkinterはOSには入っていないので、自分で追加インストールする必要がある。
その後、pythonプログラムで、
import tkinter root = tkinter.Tk() root.title("タイトル") root.mainloop()
のようにすると、GUIウィンドウが自動的に表示される。ウィンドウの大きさは、自動的に設定される。
ウィンドウのタイトルは、root.title("◯◯")の、二重引用符""の中の文字列である。
その他の使い方は、Windows 版と同じである。なので、Windows用に書かれたtkinter使用のpythonコードは、Linuxでも、普通に動作する場合が多い。
たとえば上記コードなら、「mainloop()」を最後に書くことで、実際にGUI対象物を作成表示する作業が実行される。
もし、mainloop()を書いてないと、プログラムを実行しても、なにも表示せずに終了する。
Linux版pythonでの画像の表示やテキストラベルなどの機能も、Windows版と同様のコードで動作でき、表示結果としてWindows同様のGUI結果が表示される。(ただし、ウィンドウの形などは、各OSに合わせた形に調整されているが。)