プログラミングの勉強をしていると「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 |
上記のコードを実行すると、三目並べを作成することができます。
まとめ
今回、GUIライブラリの基本的な知識や5種類のGUIライブラリ比較、実践方法まで説明してきましたがいかがでしたでしょうか。
今回の要点をまとめると以下のようになります。
- GUIとは直感的に操作可能なUIのこと
- TkinterはPythonに標準搭載されているGUIライブラリ
- KivyはOS問わずに操作するオープンソースのライブラリ
- PyQtはQtのPythonバージョン
- wxPythonはwxWidgetsのPythonバージョン
- PySideはQtベースのGUIライブラリ
GUIは視覚的に使用できるため初心者でも比較的簡単に利用できるでしょう。ぜひ積極的にGUIライブラリを活用してプログラミングを効率化してみてください。
このブログでは他にもPythonの学習に役立つ情報を発信しています!ぜひご覧ください。


