• トップ
  • ブログ一覧
  • PythonでGUIを組んで簡単なテキストエディタを作ってみた!
  • PythonでGUIを組んで簡単なテキストエディタを作ってみた!

    メディアチームメディアチーム
    2019.07.24

    IT技術

    Pythonで可能なことは機械学習や分析だけじゃない!

    現在、最も人気のあるプログラミング言語「Python」。

    Pythonというプログラミング言語は、一般的に「機械学習や高等な分析などに使う」というイメージが強いのではないでしょうか?

    実は、Pythonで、GUIを組んだりゲームを作成したりすることが可能です。

    GUIに関しては、Pythonは標準で「Tkinter」というGUIを構築するライブラリが備わっています。

    そのため、何か特別なライブラリをインストールせずとも、GUIを組むことができるのです。

    Tkinter以外のライブラリ

    GUIを組むためのライブラリは、「Tkinter」以外にも存在します。

    どういったGUIライブラリがあるのかというと、人気が高くなってきている「Kivy」

    それから、wxWidgetsのPythonバージョンである「wxPython」などがあります。

    また、これらのライブラリは、pipコマンドを使えば容易にインストールが可能。

    「GUIを組むための環境をつくるのは面倒」と思っていた人にとっては朗報です!

    wxPythonで簡単なGUIを組んでみる

    ここからは、実際にPythonでGUIを実際に組んでみたいと思います。

    まず、Python本体とGUIを組むためのライブラリであるwxPythonのインストールをしてみましょう。

    Pythonのインストール

    Pythonのインストールは、公式サイトにあるインストーラーを使えばOKです。

    【Pythonの公式サイト】
    https://www.python.org/

    wxPythonをインストール

    Pythonのインストールが済んだら、コマンドプロンプトを起動して、pip install wxPython と入力してください。

    Python本体のインストールと環境変数の設定がきちんとされていれば、問題なくwxPythonをインストールできるでしょう。

    次に、コマンドプロンプトで、python と入力し、Pythonインタプリタを起動させてください。

    そして、その状態で、import wx と入力しましょう。

    これらがエラーなく行えれば、環境の構築は完了です。

    実際にGUIを組んでみる

    さて、次は実際にGUIを組んでみましょう!

    まず最初は、「何もないウィンドウを表示」するところから始めてみるとしましょう。

    コードはこちらです。

    1import wx
    2
    3window = wx.App()  # wxPythonのGUI Appインスタンスを生成 (= GUI Appを初期化)
    4frame = wx.Frame(None, -1, '空のウィンドウ', size=(500, 250))  # フレーム作成
    5frame.Show()  # フレーム表示
    6window.MainLoop()  # イベント待機

    実行と解説

    このように、たった5行のコードのみで、任意のサイズのウィンドウを表示できてしまいます。

    wx.Frame(None, -1, '空のウィンドウ', size=(500, 250)) は第一引数に親オブジェクトを取り、第二引数でIDを取ります。

    第三引数は見てわかるように、GUIウィンドウのタイトルです。

    親オブジェクトは今回はNone となっていますが、今後いま作成した「フレーム(frame )」にボタンなどを配置していく時には、frame が親オブジェクトになります。

    またIDは、あらかじめ予約してあるwx.ID_OPEN などを指定すると簡単にボタンなどが作成可能ですが、通常は-1 かwx.ID_ANY にしておきます

    それでは作成したウィンドウに「ボタン」を配置したり、「文字」を表示したりすることで、もう少し実用的なGUIアプリケーションを作成してみましょう!

    簡単なテキストエディタを作ろう!

    次に、単純なソフトといえるGUIを作ってみましょう!

    まずは、コードをご覧ください。

    1import wx
    2
    3
    4def click_save_button(event):  # 保存ボタンをクリック時の動作
    5    save_file = open('wxtest.txt', 'w')  # テキストファイルを開く
    6    save_file.write(text.GetValue())  # 入力されたテキストを取得し、ファイルへ書き込み
    7    save_file.close()
    8
    9
    10if __name__ == '__main__':
    11    window = wx.App()  # wxPythonのGUI Appインスタンスを生成 (= GUI Appを初期化)
    12    frame = wx.Frame(None, -1, 'テキスト入力&保存', size=(500, 250))  # フレーム作成
    13
    14    panel = wx.Panel(frame, -1)  # ボタンやテキストボックスを配置するためのパネルを作成
    15    save_button = wx.Button(panel, -1, pos=(10, 10), label='保存')  # 保存ボタンの作成
    16
    17    text = wx.TextCtrl(panel, -1, pos=(10, 50), size=(465, 150), style=wx.TE_MULTILINE)  # テキストボックスの作成
    18    save_button.Bind(wx.EVT_BUTTON, click_save_button)  # 保存ボタンとボタン押下時の動作をまとめた関数をひもづける
    19    frame.Show()  # フレーム表示
    20    window.MainLoop()  # イベント待機

    解説

    このコードを実行すると、上記の図のような、簡単なテキストエディタになります。

    機能としては、保存ボタンを押したときに、カレントディレクトリへ入力したテキストを「wxtest.txt」という名前で保存するものとなっています。

    「ボタンを押したときに指定の動作をする」「テキスト入力を受け取る」といったことをしています。

    またButton クラスでは、引数として配置座標とラベル名をそれぞれ、pos=(x, y) 、label='hogehoge' としてとります。

    なんと、たった20行未満のコードを書くだけで、シンプルなテキストエディタが完成しました!

    今回は、簡単な例を掲載しましたが、コードを拡張していくことで、様々なアプリを作成することが可能となります。

    さいごに

    Pythonという言語は、「機械学習」「複雑な分析」に用いられることが多いのは事実です。

    では、これらに使われる以外の特徴はないのか?というと、そうではないことをご理解いただけたと思います。

    Pythonでは、サイズの大きなソフトを使ったり、面倒な環境構築したりせずに、GUIを組むことができるという特徴があります。

    PythonそのものやGUI開発に興味がある人は、本記事を参考にぜひ挑戦してみてくださいね!

    また以下の記事では、今回は紹介しきれなかったKivyというGUIライブラリと機械学習を組み合わせたアプリケーションを作成しながら解説しています。

    ぜひ読んでみてください!

    featureImg2019.06.27KerasとKivyを使って手書き数字認識アプリを作ってみた!手書き数字認識アプリを作りたい前回の 自作の誤差逆伝播学習法で手書き数字を認識させてみよう! では、自作プログラムで自...

    こちらの記事もオススメ!

    featureImg2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    オススメのwxPython本

    Creating GUI Applications with wxPython
    Creating GUI Applications with wxPython

     

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    メディアチーム
    メディアチーム
    Show more...

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background