wxPythonでシンプルなメモ帳を作成する

2021年6月4日金曜日

Python wxPython

t f B! P L
wxPythonで簡単なメモ帳を開発する

今回やること

wxPythonで超シンプルなメモ帳を開発します。メニューバー、テキストボックスのみ使い、あとは
ファイルダイアログを利用して名前を付けて保存ダイアログで保存します。

(追記)また、700ビュー記念として、メモ帳を作成しました。コードも記載していますし、exeファイルの配布も行っております。
是非ご覧ください!! 700ビュー!wxPythonで普通に使えるメモ帳ソフトを作ってみた。

コードの書き方

ここ見るのめんどくさいって方は、ここの「コードの書き方」をスキップして、次の「ソースコード」に移動しちゃってください

----

ではまず、必要なライブラリをインポートします。

import wx
import sys

wxは今回のメインなので必須で、sysはアプリを完全に終了するために必要なものです。

次に普通にFrameを作成しましょう。

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None,-1,"メモ帳",size=(800,500))

そして、パネルとテキストボックスを配置します。

        panel = wx.Panel(self,-1)
        self.text = wx.TextCtrl(panel,-1,"",style=wx.TE_MULTILINE)

TE_MULTILINEは、複数行入力を可能にするという意味です。

次にBoxSizerにアイテムを追加して、TextCtrlを全体にひきのばします。

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.text,1,wx.EXPAND)
        panel.SetSizer(sizer)

そしたら、メニューバーの作成です。

        MBar = wx.MenuBar()
        FileMenu = wx.Menu()
        FileMenu.Append(0,"保存 (&S)")
        FileMenu.AppendSeparator()
        FileMenu.Append(1,"終了 (&X)")
        MBar.Append(FileMenu,"ファイル (&F)")

        self.SetMenuBar(MBar)
        self.Bind(wx.EVT_MENU,self.SelectMenu)

んで、メニューバーがクリックされたときの動作を追加します。

    def SelectMenu(self,event):
        ID = event.GetId()
        if ID==0: #保存メニューがクリックされたら...
            #ダイアログを表示させて保存
            FileD = wx.FileDialog(self,"ファイルを保存",wildcard="全ての形式 | *.*",style=wx.FD_SAVE| wx.FD_OVERWRITE_PROMPT)
            if FileD.ShowModal() == wx.ID_OK: #[保存]がクリックされたら...
                OpenFile = open(FileD.GetPath(),"w") #ファイルに書き込む
                OpenFile.write(self.text.GetValue())
                OpenFile.close()
        elif ID==1:
            sys.exit()

そしたら、後はこれです↓

if __name__ == "__main__":
    Ap = wx.App(False)
    MyFrame().Show(True)
    Ap.MainLoop()

ソースコード

import wx
import sys
class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None,-1,"メモ帳",size=(800,500))
        panel = wx.Panel(self,-1)
        self.text = wx.TextCtrl(panel,-1,"",style=wx.TE_MULTILINE)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.text,1,wx.EXPAND)
        panel.SetSizer(sizer)
        
        MBar = wx.MenuBar()
        FileMenu = wx.Menu()
        FileMenu.Append(0,"保存 (&S)")
        FileMenu.AppendSeparator()
        FileMenu.Append(1,"終了 (&X)")
        MBar.Append(FileMenu,"ファイル (&F)")

        self.SetMenuBar(MBar)
        self.Bind(wx.EVT_MENU,self.SelectMenu)
        
    def SelectMenu(self,event):
        ID = event.GetId()
        if ID==0: #保存メニューがクリックされたら...
            #ダイアログを表示させて保存
            FileD = wx.FileDialog(self,"ファイルを保存",wildcard="全ての形式 | *.*",style=wx.FD_SAVE| wx.FD_OVERWRITE_PROMPT)
            if FileD.ShowModal() == wx.ID_OK: #[保存]がクリックされたら...
                OpenFile = open(FileD.GetPath(),"w") #ファイルに書き込む
                OpenFile.write(self.text.GetValue())
                OpenFile.close()
                
        elif ID==1:
            sys.exit()
            
if __name__ == "__main__":
    Ap = wx.App(False)
    MyFrame().Show(True)
    Ap.MainLoop()

TextCtrlのカスタマイズ

wx.TextCtrlのサンプルは別の記事で紹介しておりますので、そちらもぜひご覧ください!!
wxPython テキストボックスを使ったサンプル / wx.TextCtrl Example
wxPython テキストボックスを使ったサンプル / wx.TextCtrl Example

TextCtrlを右揃えにしたり、フォントを変更したり、色を変更したり...のカスタマイズできます。

右揃え、中央揃え、左揃え

左揃えは標準だから、いいとしてまずは中央揃えです。
以下のように変更してください。

self.text = wx.TextCtrl(panel,-1,"",style=wx.TE_MULTILINE | wx.TE_CENTER)

ってことは右揃えは...以下のようになります。

self.text = wx.TextCtrl(panel,-1,"",style=wx.TE_MULTILINE | wx.TE_RIGHT)

フォントを変更する

フォントを変更するためには、TextCtrlを生成した後に、以下のコードを追加する必要があります。

self.text.SetFont(wx.Font(12,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD,faceName="メイリオ"))

TextCtrlにフォントを設定するにはwx.Fontを使います。最初の「12」はサイズを指定しています。次の「wx.FONTFAMILY_DEFAULT」はフォントファミリーを指定しています。
あまり、よくわかりませんが、DEFAULTにしときます。

「FONTSTYLE_NORMAL」は文字を斜めにするかでうかです。斜めにするには、「wx.FONTSTYLE_ITALIC」に変更します。

「wx.FONTWEIGHT_BOLD」は太字にするかどうかです。今の設定では太字にしている設定です。もとに戻すには、「wx.FONTWEIGHT_NORMAL」に変えてください。

「faceName="メイリオ"」はフォントの名前を指定しています。個人的にメイリオが日本語でもいい感じに表示されるのでお気に入りです。

色を変更する

色を変更するには、TextCtrlを生成した後に、SetBackgroundColour()やSetForegroundColour()を使います。

self.text.SetBackgroundColour("black") #背景色の設定。今回は黒色
self.text.SetForegroundColour("green") #文字色の設定。今回は緑色

wxPythonで簡単なメモ帳を開発する

動作環境
・Windows10
・64bit
・Python 3.9.1
・wxPython 4.1.1a1



wxPythonの今スグ使えるサンプル集18個!GUI開発をマスターしよう!

今回はwxPythonのサンプルを18個紹介したいと思います。
wxPythonはウィジェットが豊富で自由度が高いので、応用するといろいろなツールが作成できます。

このブログを検索

要望について

ブログのレイアウトやテーマについての提案をいただきました。現在qooqテーマを適応中です。 語尾を自動でつけるプログラムを作りたいという要望をいただきました。是非紹介したいですがどの言語でどのようなプログラムかなど、お問い合わせフォームで詳しく教えてください!

最近の出来事

最近の出来事
寿司打お勧め75位♪(練習モードだけど)

アンケート

Welcome!

「プログラミング独学ブログ」へようこそ。 Yakinyといいます。幅広い範囲で投稿していますので、ぜひ過去の記事も見てみてください!!コメントも大歓迎です!更新がとまってしまって申し訳ございません

お問い合わせ

名前

メール *

メッセージ *

QooQ