PythonのGUI作成
PythonのGUIライブラリの中でも、ネット上に情報が多い3つのGUIライブラリを紹介します。これらのライブラリを使うことで、ローカルマシン上にウインドウを表示させて、GUI表示が可能です。
ただ、2022年現在、これらの「ネイティブGUI」(ローカルマシン上にウインドウを開く方式のGUI)は、あまり使われていない印象。利用方法次第ではありますが、後述のWEB GUIが主力になってきていると思います。
tkinterのサンプルコード
古くからあるPythonのGUI。GUIで実現したいことは、ほぼtkinterで実現できる。
tkinterはPythonに同梱されていて、Python3をインストールすると一緒にインストールされます。python3のプロンプトで、import tkinterを実行できればインストールされているということになります。
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()
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入門