wxPythonでAA管理ツールを作ろう!第三回 AAListと辞書
あいさつ
つかさです。今まではコマンドラインランチャ編と同じような進行でしたが、今回からいよいよAA管理ツールっぽいことをしていきます。
リストボックスにAAListフォルダ内のファイルが一覧表示されるようにします。
準備
AAlist.pyと同じフォルダに、AAListというフォルダを作ります。
その中に、
となるファイルを、いくつか作ってください。
AAList内のファイル名をリスト化
前回から、MyTxtFrmクラスの初期化メソッドのところに数行追加してます。
- AAlist04.py
import wx,os class MyTxtFrm(wx.Frame): def __init__(self, parent, id): wx.Frame.__init__(self, parent, id) aa_list = os.listdir("AAList") self.AA_Dict = {} for x in aa_list: key = os.path.splitext(x)[0].decode("shift-jis") path = os.path.join("AAlist",x) self.AA_Dict[key] = path self.TxtCtr = wx.TextCtrl(self, -1) self.LBox = wx.ListBox(self, -1, choices = self.AA_Dict.keys()) self.TxtCtr.Bind(wx.EVT_KEY_DOWN, self.OnKeyChar) self.sizer = wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.TxtCtr, 0, wx.EXPAND) self.sizer.Add(self.LBox, 1, wx.EXPAND) self.SetSizer(self.sizer) self.SetAutoLayout(1) self.sizer.Fit(self) def OnKeyChar(self,event): key = event.GetKeyCode() if key == wx.WXK_ESCAPE: wx.Exit() elif key == wx.WXK_UP: count = self.LBox.GetCount() next = self.LBox.GetSelection() - 1 if next >= 0: self.LBox.SetSelection(next) else: self.LBox.SetSelection(count - 1) elif key == wx.WXK_DOWN: count = self.LBox.GetCount() next = self.LBox.GetSelection() + 1 if next < count: self.LBox.SetSelection(next) else: self.LBox.SetSelection(0) else: event.Skip() class MyApp(wx.PySimpleApp): def OnInit(self): self.TxtFrm = MyTxtFrm(None, -1) self.TxtFrm.SetSize( (180, 200) ) self.TxtFrm.Show() self.TxtFrm.TxtCtr.SetFocus() return 1 app = MyApp() app.MainLoop()
osモジュールのインポート
まずは一番上をご覧ください。
import wx,os
となってますね。フォルダ内のファイルの情報を得るため、osモジュールが必要なのでimportしてます。
AAList内のファイル名一覧をリスト化
osモジュールには、listdir()という関数があります。これは、特定のフォルダ内にあるファイルをリスト化してくれる関数です。
aa_list = os.listdir("AAList")
これで、AAListフォルダ内のファイルをリスト化しているわけです。
中身は、
["つかさ.txt","ティッシュやるから元気出せよ.txt","うーっす(キック).txt", "おはようじょ.txt","まじで.txt","ゆのっち.txt"(以下略)]
のようになってます。
辞書でファイル名とパスを結びつける
ついでこのリストを利用して、ファイル名をキーに。パスを値とした、辞書を作成します。
self.AA_Dict = {} for x in aa_list: key = os.path.splitext(x)[0].decode("shift-jis") path = os.path.join("AAlist",x) self.AA_Dict[key] = path
まず空の辞書を作ります。
ついで、リスト内の各要素への操作を、for文を使うことで行ってます。
forのブロックの中で、
- keyにファイル名から拡張子を取り除いたものを入れ、デコードする
- pathにos.path.joinで結合して作ったパスを入れる
- self.Dict[key] = pathで拡張子を除いたファイル名をキーに。パスを値に
このようにして一々辞書にキーと値のペアを追加していき、ファイル名とパスとが一対一対応した辞書を作るわけです。
中身は
{"つかさ":"AAList\つかさ.txt", "ティッシュやるから元気出せよ":"AAList\ティッシュやるから元気出せよ.txt", "うーっす(キック)":"AAList\うーっす(キック).txt"(以下略)}
のようになってます。