Python GUI作成の方法とプログラミングコード

PythonのGUI作成

PythonのGUIライブラリの中でも、ネット上に情報が多い3つのGUIライブラリを紹介します。これらのライブラリを使うことで、ローカルマシン上にウインドウを表示させて、GUI表示が可能です。

ただ、2022年現在、これらの「ネイティブGUI」(ローカルマシン上にウインドウを開く方式のGUI)は、あまり使われていない印象。利用方法次第ではありますが、後述のWEB GUIが主力になってきていると思います。

tkinterのサンプルコード

古くからあるPythonのGUI。GUIで実現したいことは、ほぼtkinterで実現できる。

tkinterはPythonに同梱されていて、Python3をインストールすると一緒にインストールされます。python3のプロンプトで、import tkinterを実行できればインストールされているということになります。

関連 python importの使い方

python バージョン2以前は別途インストールが必要だったようですね。

$ python3
Python 3.6.9 (default, Jan 26 2021, 15:33:00)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter
>>>

以下は、Hello worldをGUI上に表示するコードのサンプル。

from tkinter import *
from tkinter import ttk
root = Tk()
frm = ttk.Frame(root, padding=10)
frm.grid()
ttk.Label(frm, text="Hello World!").grid(column=0, row=0)
ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0)
root.mainloop()

関連)tkinter — Tcl/Tk の Python インターフェース — Python 3.10.4 ドキュメント

PySimpleGUIのサンプルコード

シンプルな記述でGUIを作成できるライブラリ。tkinterよりも少ない記述でGUIを実現できるが、あまり凝ったことはできません。

内部的に、tkinter、Qt、WxPython、またはRemiを呼び出してGUIを実現しています。

sg.popup_no_buttons('Hello World') # the single line

# single line using a real window
sg.Window('Hello world', [[sg.Text('Hello World')]]).read()

# This is a "Traditional" PySimpleGUI window code. First make a layout, then a window, the read it
layout = [[sg.Text('Hello World')]]
window = sg.Window('Hello world', layout)
event, values = window.read()

window.close()

関連)PySimpleGUI · PyPI

Hello World程度のGUIだと、tkinterと記述量はあまり変わらないかも。

Pygameのサンプルコード

Pythonでビデオゲームを作るため、2000年ごろから開発されているライブラリ。

なのですが、このライブラリを使ってゲームを作る意義はあまりないと言えるでしょう。趣味や勉強で、Pythonでゲームを作ってみたいという人には良いかも知れません。

関連)Pygame公式サイト

GitHubに、ゲームのサンプルコードがありました。

参考)pygame/examples at main · pygame/pygame · GitHub

現在は、UnrealEngineやUnityといった2D、3Dに対応してゲーム開発環境が無償で利用できるので、本気でゲームを作りたい人は、ゲームエンジンを使う方が良いでしょう。

PythonのGUI(WEBベース)

単にGUIを使いたいという場合、ネイティブなGUIを作るよりもブラウザからアクセスできるWEB GUIを使うのが一般的でしょう。

クラウド上で動作するサービスにGUIをつけたい、といった場合にもWEB GUIであれば、あまり深く考えずにGUI対応が可能です。

PythonのWEB GUIの中でもメジャーなものを紹介します。

Django(ジャンゴ)のサンプルコード

機能が豊富で、本格的なWebGUIを使いたいならコレ。業務用アプリケーションなどでもよく利用されます。

機能が豊富なだけに、開発で使えるようになるまではある程度の利用経験・勉強が必要になります。

まず、Djangoを動かすには最低限これだけのファイルが必要になります。

polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py

コピペしてパッと実行できる感じじゃないですね。ひととおり各ファイルの役割を理解しておく必要があります。

polls/views.pyに以下を記述します。Hello worldの文字を表示する箇所です。

from django.http import HttpResponse


def index(request):
return HttpResponse("Hello, world. You're at the polls index.")

さらに、polls/urls.pyに以下を記述。ようやくHello worldが実現できます。

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]

関連)はじめての Django アプリ作成、その 1 | Django ドキュメント | Django

初見だと、何が何やら…という感じですが、大規模なWEBアプリだと、Django一択ということもよくあります。

Flask(フラスク)のサンプルコード

DjangoよりはとっつきやすいWebGUI。業務アプリによっては、Flaskで十分、ということも多いです。

Python系の開発者としては、DjangoとFlaskを抑えておけば困らないと思います。

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"

実行時には、アプリ名を環境変数FLASK_APPに指定します。(上記コードのファイル名がhello.pyの前提)

$ export FLASK_APP=hello
$ flask run
bk copyimages.sh createexport.sh exportfile_from_input.sh font getimagefromblogdir.sh imagemojiire.py imagemojiire.sh imagemojiire.sh.org images importtxt maketitlefromh3.sh memo mizumashi_image.sh oldexport oldimages oldimport outputimages shuffle_image.sh title.txt title.txt.org wk Running on http://127.0.0.1:5000/

コードコピペで動作が確認できるので、Djangoよりはとっつきやすいですね。

関連)Flaskへようこそ — Flask Documentation (2.0.x)

Bottle(ボトル)のサンプルコード

あえてあげるなら、初心者にも扱えるというコレ。ただし、データベースやユーザ管理に対応していないので、業務アプリにはほぼ使えないと言っていいでしょう。

個人の小規模なアプリになら使っていいかも。シンプルではありますが、Flaskとそれほどコード記述量は変わらない印象ですね。Bottleを極めても大きめのプロジェクトに使えないせいか、あまり利用されていない印象があります。

from bottle import route, run, template

@route('/hello/<name>')
def index(name):
return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=8080)

関連)Bottle: Python Web Framework — Bottle 0.13-dev documentation

PythonのGUIまとめ

まとめ

  • PythonのGUIライブラリは多彩で、メジャーなものからマイナーなものまで数が多い。
  • PythonのネイティブGUIには、tkinter、PySimpleGUI、PyGameがあるが学習目的以外ではあまり利用されていない
  • PythonのWEB GUIには、Django、Flask、Bottleなどがあり、業務プロジェクトではDjangoかFlaskが使用されることが多い。

関連記事python入門