ダイアログを開いてファイルを選択し、そのファイルの内容を表示する
引き続き、MenuMod.pyをいじってみる。ファイルを選択するダイアログを開くことはできたが、ファイルを選択しても何も起こらない。
(demo.pyから実行すれば、下のログ画面に選択したファイル数とフルパスでファイル名が表示されるのだが、ここらへんの仕組みはとりあえず置いておいて)
そこで、選択したファイルの中身を別ウィンドウを開いて表示する、ように変えてみる。別ウィンドウでファイルを開くには、デモの中の”ScrolledMessageDialog"の通りにやればよい。
ところで、MenuMod.pyはダブルクリックで実行させると、エラーがあってもどこがおかしいのか判断できない。IDLEで開いてRUNさせると、エラーの内容を示してくれるのでとても便利だ。しかし、LinuxではIDLEは使えないからLinuxでテストするときはどうしようか。
というわけで、比較的簡単そうに見えたのだが...、
MenuMod.pyの中の関数Menu101を変えればよい。
def Menu101(self, event): dlg = wx.FileDialog( self, message="Choose a file", defaultDir=os.getcwd(), defaultFile="", wildcard=wildcard, style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR ) self.log.WriteText('You selected %d files:' % len(paths)) for path in paths: self.log.WriteText(' %s\n' % path) self.log.WriteText("CWD: %s\n" % os.getcwd()) dlg.Destroy()
この部分を
def Menu101(self, event): dlg = wx.FileDialog( self, message="Choose a file", defaultDir=os.getcwd(), defaultFile="", wildcard=wildcard, style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR ) if dlg.ShowModal() == wx.ID_OK: paths = dlg.GetPaths() f = open(paths, "r") msg = f.read() f.close() dlg2 = wx.lib.dialogs.ScrolledMessageDialog(self, msg, "text") dlg2.ShowModal() dlg.Destroy()
と変更した(MenuMod2.py)。しかし...、動かない。
f=open(paths, "r")のところで、pathsの代わりにファイル名を直接書き込めば、ダイアログが開くので、ファイル名の指定がおかしいことは分かる
(ScrolledMessageDialog.pyでは、ファイル名を直接書き込んでいるため問題ない)。
pathsにはファイル名がフルパスで入るのだが、なぜopenできないのか分からない。
ちなみに、”TypeError: coercing to Unicode:"と表示されるので型がちがうのか?
そもそも、dlg.GetPaths()でパスを含んだファイル名を得ているが、ファイル名だけが必要だ。ファイル名だけを得るメソッドというものを探さなければならないのか?どっちにしろ今の自分には限界らしい。
この問題は置いておく。