Python 文法・関数

効率化を図ろう!PythonのGUIライブラリ比較や具体例を紹介!

プログラミングの勉強をしていると「GUIアプリケーション」「GUIライブラリ」など「GUI」という言葉を聞いたことがあるのではないでしょうか。「GUIって何?」「GUIを使うと何ができるの?」という疑問を抱いている方もいるでしょう。

そこで今回は、GUIとは何か、どのような特徴があって何ができるのかといった基本的なことから、実践方法まで詳しく説明します。


本ブログを運営しているTech Teacherは、業界初のプログラミング家庭教師サービスを提供しています。

その特徴は完全マンツーマン・フルオーダーメイド指導・30分ごとの利用が可能であるところです。

完全マンツーマン

Tech Teacherのマンツーマン指導なら理解できない箇所は何度も分かるまで説明を受けることができます。

フルオーダーメイド指導

Tech Teacherではあらかじめ決められたカリキュラムはありません。そのためご自身の学習状況や学びたいことに合わせた指導が可能です。

一括支払いなし

一般的なプログラミングスクールの料金体制はカリキュラムに対して一括払いですが、Tech Teacherでは利用した分だけの支払いとなります。そのため、大きな費用負担がなく気軽に始めることができます。

Pythonをマンツーマン指導で学べるプログラミング家庭教師について詳しく知りたい方ほこちら

GUIとは?

GUIとは「Graphical User Interface」の略称です。その名の通り「ユーザーが視覚的に操作できるインターフェース」を指します。
実は普段行っている「ファイルをダブルクリックで開く」「ウィンドウを開いて操作する」といった操作はすべて「GUI」を使っています。

このようにGUIを使って操作できるアプリケーションのことを「GUIアプリケーション」、GUIアプリケーションを開発するためのライブラリを「GUIライブラリ」と呼びます。

GUIを使うことで、文字だけでなくアイコンなどの画像で操作対象を分かりやすくしたり、マウスで直感的に操作したりできるようになります。コンピュータの操作に慣れていない人でもGUIアプリケーションであれば簡単に操作できますよね。

おすすめのGUIライブラリ5選

ここからは、Pythonで使えるGUIライブラリを5種類紹介していきます。

  • Tkinter
  • Kivy
  • PyQt
  • wxPython
  • PySide

それぞれ、どのような特徴があるのか説明していきますね。

Tkinter

「Tkinter」はPythonに標準搭載されているライブラリです。

1988年に登場したスクリプト言語「Tcl」を使ってGUI開発を行うためのツールキットに「Tk」というものがあります。これを指して「Tcl/Tk」と呼びますが、TkinterはPythonでTcl/Tkを扱うためのライブラリとなっています。

標準搭載されているために環境構築がいらないのは楽ですが、機能面で物足りなさを感じている開発者も多く、外部のGUIライブラリを利用する人が多くなっています。

【Tkinterの特徴】

  • Pythonに標準搭載
  • GUIライブラリTcl/TkのPythonバージョン
  • 作成したGUIアプリはクロスプラットフォームで動作可能

Kivy

「Kivy」はWindows・Mac・iOS・Androidなど、どんな環境でも動作するGUIライブラリです。また、マウス・キーボード・マルチタッチなど多彩な入力に対応しているGUIライブラリですよ。

様々なOS間で外観を統一することができ、特にゲームに強みがあるライブラリとなっています。

【Kivyの特徴】

  • TkinterよりクロスプラットフォームなGUIアプリを作成可能
  • ゲームやアプリも制作可能
  • OpenGL使用

PyQt

C++言語で記述された「Qt」というGUIツールキットをPythonで扱えるようにしたものが「PyQt」です。

C++言語の知識がなくてもPythonの文法でGUI作成でき、GUIデザインを美しく制作しやすいことから、多くのソフトが制作されていますよ。

【PyQtの特徴】

  • 設計がモダンでデザイン面のメリットが豊富
  • 商用利用するにはロイヤリティが発生

wxPython

C++言語で記述されたクロスプラットフォームGUIツールキット「wxWidgets」のPythonバージョンが「wxPython」です。

多数の言語で利用できるようになっていますが、こちらを利用するにはPython3が必要です。
wxPythonは安定した動作に定評があり、ライブラリが充実していることから、少し手間のかかったものを制作するのにも最適ですよ。

【wxPythonの特徴】

  • 機能が充実している
  • 商用利用ができる

PySide

「PySide」はPyQtと同様にQtをベースとしたクロスプラットフォームのGUI作成のためのPythonライブラリです。

PyQtの方が利便性が高いと言われていますが、PySideは商用利用が可能になっています。そのため、用途によってどちらを利用するか選択しましょう。

【PySideの特徴】

  • クロスプラットフォームに対応したアプリ開発可能
  • Qtベース

GUIライブラリを使用したアプリ作成

ここからは、どのような環境でも動作する「Kivy」を使ったアプリケーション作成について説明していきます。

インストール

まずKivyのパッケージをインストールしましょう。

pipでインストールする場合、最初に「pip install –upgrade pip」を実行してpipをアップデートします。

その後、次のコマンドを実行してKivyをインストールします。

1. pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew
2. pip install kivy.deps.gstreamer
3. pip install kivy.deps.angle
4. pip inatall kivy

これでKivyのインストールは完了です。

万が一動かない場合には「Pygame」や「Cython」をインストールすると解決しますよ。

三目並べの作成

ここからはKivyを利用して「三目並べ」を作成してみましょう。

1.  from kivy . app import App
2.  from kivy . uix . gridlayout import GridLayout
3.  from kivy . uix button import Button
4.
5.  SYMBOLS = ( “×” , “〇” )
6.
7.  def symbol _ generator ( ) :
8.  while True :
9.  for symbol in SYMBOLS :
10.  yield symbols
11.
12.  class Board ( GridLayout ) :
13.
14.  grid = None
15.   symbols = None
16.
17.  def __ init __ ( self , **kwags ) :
18.  super ( Board , self ) . __ init __ ( **kwargs )
19.
20.  self . cols = 3
21.   self . rows = 3
22.   self . symbols = symbols _ generator ( )
23.
24.  self . grid = [ [ None for cla in range ( self cols ) ] for row in rande ( self . rows ) ]
25.
26.  self . draw _ tiles ( )
27.
28.  def draw _ tiles ( self ) :
29.  ”””
30.  Adds all tiles to the GridLayout – Board
31.   “””
32.  for row in range ( self . rows ) :
33.  for col in range ( self . cols ) :
34.  tile = Button ( )
35.  tile . grid ( on _ press = self . on _ pressd)
36.   self . grid [ row ] [ col ] = tile
37.   self . add _ widget ( tile )
38.
39.   def on _ pressd ( self , instance ) :
40.   “””
41.   Handles a click on a tile
42.   “””
43.   # 取得済みの場合
44.   if instance . text :
45.   return None
46.
47.   # 利用可能の場合
48.   instance . text = next ( self . symbols )
49.  # instance . text = next ( self . symbols _ next _ ( )
50.   instance . font _ size = 100
51.
52.   self . is _ finished ( )
53.
54.   def is finished ( self ) :
55.   “””
56.   Checks board status
57.   “〇” : “〇” wins
58.   “×” : “×” wins
59.   “引き分け” : drow
60.   None : on going
61.   “””
62.   winner = self . get _ winner ( )
63.
64.   if winner :
65.   content = BoxLayout ( orientation = “vertical” )
66.   if winner == “引き分け” :
67.   content . add _ widget ( label ( text = “Draw” ) )
68.   else :
69.   contenr . add _ widget ( Label ( text = “%s あなたの勝ちです!” % winner ) )
70.   close _ button = Button ( text – “Close” )
71.   content . add _ widget ( close _ button )
72.
73.   popup = popup ( title = “ゲーム終了” , contenr = content , auto _ dismiss = False )
74.   popup . open ( )
75.   # popup ( title = “ゲーム終了” , content = content , aut0 _ dismiss = False ) . open ( )
76.
77.  close _ button . bind ( on _ release = popup . dismiss )
78.
79.   self . restart _ board
80.
81.   def get _ winner ( self ) :
82.   “””
83.   Return winner symbol , “引き分け” , or None
84.   “””
85.   # 勝ちパターン
86.  winning _ lines = (
87.   ( ( 0,0 ) , ( 0,1 ) , ( o,2 ) ) , ( ( 1,0 ) , ( 1,1 ) , ( 1,2 ) ) , ( ( 2,0 ) , ( 2,1 ) , ( 2,2) )
88.   ( ( 0,0 ) , ( 1,0 ) , ( 2,0 ) ) , ( ( 0,1 ) , ( 1,1 ) , ( 2,1 ) ) , ( ( 0,2 ) , ( 1,2 ) ( 2,2 ) )
89.   ( ( 0,0 ) , ( 1,1 ) , ( 2,2 ) ) , ( ( 0,2 ) , ( 1,1 ) , ( 2,2 ) )
90.   )
91.  for line in winning _ lines :
92.  row = [ ]
93.   for cell in line :
94.   row , append ( self . grid [ cell [ 0 ] ] [ cell [ 1 ] ] . text )
95.
96.  for symbol in SYMBOLS :
97.   if all ( [ s == symbol for s in row ] ) :
98.   return symbol
99.
100.   # ゲーム進行中
101.   for row in self . grid :
102.   for col in row :
103.   if col . text = ” ” :
104.   return None
105.
106.  # 引き分け
107.   return “引き分け”
108.
109.   def restart _ board ( self ) :
110.   # クリアボード
111.   for row in self . grid :
112.   for col in row :
113.   col . text = ” ”
114.
115.   # 初期化
116.   if next ( self . symbols ) == “〇” :
117.   return
118.   else :
119.   next ( self . symbols )
120.   return

上記のコードを実行すると、三目並べを作成することができます。

「Tech Teacherで!~家庭教師ならではの3つの魅力~」

本Blogを運営するプログラミング家庭教師Tech Teacherは以下のような疑問をすべて解決できるサービスです。

・Pythonの応用をもっと学びたいが、値段が高いスクールに通うのは気が引ける

・目的別に短時間の利用ができるサービスがあったらいいな

比較対象 Tech Teacher プログラミングスクールA社
受講形態
1対1

1対3~5
担当教師
担任教師
×
講座別の講師
カリキュラム
自分専用指導

全員指導
仕事・学業との両立
可能
×
不可能
メンター制度
担任教師

異なる担当
料金
授業分だけ
×
一括払い
初期費用
入会金
22,000円
×
一括払い
528,000円
シミュレーション
(3ヶ月90分の指導を週1で行う)

164,500円
×
528,000円

以下、Tech Teacherの3つの魅力を紹介します。

Pythonをマンツーマン指導で学べるプログラミング家庭教師について詳しく知りたい方ほこちら

1.効率的な学習スタイル

一人のためだけの指導~1対1の完全個別指導~

一般的なプログラミングスクールでは大人数の対面講義や、録画講義の視聴またはオンラインでの受講がメインです。そうなると学習しながら生じた疑問をすぐに聞くことができずに、先に進んでしまい内容をうまく理解できなかったり、作業がうまく進まなかったりします。

家庭教師であれば、マンツーマンのため自分の課題にだけ焦点を当てて指導を受けられるので、1回の授業を濃い時間にすることができます。

無駄のない学習~フルオーダーメイド~

Tech Teacherは一般的なプログラミングスクールと異なり、あらかじめ決められたコースやカリキュラム設定がありません。
一般的なプログラミングスクールのカリキュラムでは、自分が本当に学習したいことを学ぶのにいくつか他の講義を受けなければなりません

Tech Teacherでは生徒様の現状の習熟度・目的・期間に応じてお悩みにダイレクトに刺さる授業を展開し、最短で目標となるゴールを目指せます。

2.自分のペースで学習できる

必要な分だけ~従量課金モデル~

Tech Teacherでは、他にはない「短時間(30分ごと)」の利用が可能です!勉強していてちょっとわからないところ、プログラミング学習のモチベーション維持など様々な疑問や悩みを解決することができます。
授業を受けた分だけ後払いする料金体系(3,960円〜 / 30分)のため、必要な期間に必要な分だけ受講できます。

好きな時間で~相性のいい教師の紹介~

Tech Teacherではあらゆるニーズに対応できる教師陣がいるため、生徒様の希望条件に最適な教師を紹介します。

Tech Teacherを受講している方のほとんどが仕事をしている社会人の方です。TechTeacherの家庭教師なら受講日時や回数を、生徒様のご都合に合わせて柔軟に調整することができ、スキルだけでなく都合の良い時間で指導できる教師を選べます。

3.確実に身につく

挫折しない~担任教師の継続指導~

オンライン・オンデマンドの講義の視聴形態だと、学習に対するモチベーションの維持が課題となり、当初の予定よりも受講期間が伸びたり、挫折したりする恐れがあります。

Tech Teacherでは、担任教師が生徒と二人三脚で学習をするため、学習が大変なときも寄り添ったサポートを受けられます。

具体的には学習計画の管理や受講目的を明確にした上で中間目標を設定し、それに向けた学習の指導をすることでモチベーションの維持を図ります。

いつでも質問できる~チャットサポート(オプション)~

担当教師は授業の時間以外に、チャットサービスを利用して、自分で学習しているときに生じた疑問をすぐに質問して解決することができます。

Javaをマンツーマン指導で学べるプログラミング家庭教師について詳しく知りたい方ほこちら

Tech Teacherへのお問い合わせ

質問のみのお問い合わせも受け付けております。

まとめ

今回、GUIライブラリの基本的な知識や5種類のGUIライブラリ比較、実践方法まで説明してきましたがいかがでしたでしょうか。

今回の要点をまとめると以下のようになります。

  • GUIとは直感的に操作可能なUIのこと
  • TkinterはPythonに標準搭載されているGUIライブラリ
  • KivyはOS問わずに操作するオープンソースのライブラリ
  • PyQtはQtのPythonバージョン
  • wxPythonはwxWidgetsのPythonバージョン
  • PySideはQtベースのGUIライブラリ

GUIは視覚的に使用できるため初心者でも比較的簡単に利用できるでしょう。ぜひ積極的にGUIライブラリを活用してプログラミングを効率化してみてください。

このブログでは他にもPythonの学習に役立つ情報を発信しています!ぜひご覧ください。

マスターしよう!PythonでのCSVファイル操作方法を徹底解説!Pythonを学習し始めた方で、CSVの扱いでつまずいている人もいるでしょう。 「PythonにおけるCSVの読み書きについて...
Python初心者必見!おすすめの学習法や活用法を紹介Pythonの学習を始めてみたけど、Pythonを続けられるか心配ですよね。この記事ではPython初心者が知るべきことを解説します。おすすめの学習法やPythonでできることもご紹介します。Python初心者の方はぜひ参考にしてくださいね。...
Pythonは簡単?難しくない理由と失敗しない学習方法を解説プログラミングを始めてみたいけど、挫折しないか気になりますよね。プログラミングを始めるならPythonがおすすめです。この記事ではPythonが簡単な理由と失敗しない学習方法について解説します。Pythonが簡単ではないと感じる原因もご紹介しますので、プログラミングを始めようと考えている方はぜひ参考にしてくださいね。...