wxPythonで ファイルを開くダイアログを利用しファイル内容をテキストボックスへ入れる

2021年6月29日火曜日

Python wxPython ファイル

今回やること

今回はwxPythonでウィンドウを作成し、ファイルの内容をテキストボックスへ入れる方法を紹介します。
ファイルを開くダイアログを利用し、それをテキストボックスに表示させるということなので、
メモ帳に近い感じがします。今回の記事は前につくった記事と組み合わせて使うと、結構本格的なものになるので、
まだ見ていない人はぜひ見ていってください!!
wxPythonでシンプルなメモ帳を作成する

ソースコード

import wx
import sys
class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None,-1,"ウィンドウタイトル",size=(500,300))
        panel = wx.Panel(self,-1)
        self.textctrl = wx.TextCtrl(panel,-1,style=wx.TE_MULTILINE)
        sizer = wx.BoxSizer()
        sizer.Add(self.textctrl,1,wx.EXPAND)
        panel.SetSizer(sizer)
        
        MBar = wx.MenuBar()
        FileMenu = wx.Menu()
        FileMenu.Append(0,"開く")
        FileMenu.Append(1,"終了")
        MBar.Append(FileMenu,"ファイル")
        
        self.Bind(wx.EVT_MENU,self.SelectMenu)
        self.SetMenuBar(MBar)
    def SelectMenu(self,event):
        ID = event.GetId()
        if ID == 0:
            dialog = wx.FileDialog(self,"ファイルを選択",wildcard="テキスト形式|*.txt|すべての形式|*.*",style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
            if dialog.ShowModal()==wx.ID_OK:
                path = dialog.GetPath()
                openfile = open(path,"r",encoding="UTF-8",errors="ignore")
                self.textctrl.SetValue(openfile.read())
                openfile.close()
        elif ID == 1:
            sys.exit()
app = wx.App(0)
MyFrame().Show(True)
app.MainLoop()

成功例


こんな感じで[開く]で選択したファイルに内容が表示されます

文字化けへの対処

このコードではBOM無しのUTF-8で開くようにしています。よって、それ以外の文字コードで保存されたファイルは文字化けされてしまいます。
対処法として、文字コードを自動識別することがあげられます。文字コードを自動識別するための方法は結構前に投稿した記事にあります。
↓↓
Pythonでファイルを読み込む / 書き込む / エンコードを検出する


どうだったでしょうか。大事なことだったのでもう一度いいますね。
今回の記事は前につくった記事と組み合わせて使うと、結構本格的なものになるので、
まだ見ていない人はぜひ見ていってください!!
wxPythonでシンプルなメモ帳を作成する

動作環境:
Windows 10
64bit
Python 3.9.1
wxPython 4.1.1a1

コメント気軽にどうぞ!

ページ

QooQ