Python

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

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

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

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

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

Pythonの個別指導なら『Tech Teacher』

引用元:Tech Teacher

このBlogを運営するTech Teacherは、Pythonを学習する社会人を対象に、初心者から挫折した人まで、一人ひとりの目的や学習状況にあわせた個別指導を行っています。

また、オンライン指導も選べるので、自宅でも対面でも受講できます。

一人ひとりに最適化された完全マンツーマン指導を提供

完全マンツーマン指導で着実に身につく!

Tech Teacherでは専任の教師が完全マンツーマン指導を行います。
学習状況や目標をしっかり把握した教師が、生徒様のご要望もふまえながら最適なオーダーメイドの指導をご提供します。

お仕事と両立しながら続けられる!

Tech Teacherなら、受講日時や回数を生徒様のご都合に合わせて柔軟に調整することができます。
そのため、お仕事との両立がしやすく、プログラミング学習を継続的に学習することができます。忙しい合間にプログラミングを学びたいという方におすすめです。

授業料は受けた分だけ!

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が簡単ではないと感じる原因もご紹介しますので、プログラミングを始めようと考えている方はぜひ参考にしてくださいね。...