コンテンツにスキップ

Python/GUIアプリの作成

出典: フリー教科書『ウィキブックス(Wikibooks)』

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に合わせた形に調整されているが。)