###実現したいこと
wxPythonを用いて簡易テキストエディタを作る
###発生している問題
Qiitaの記事を参考に書いていたのですが、TextCtrlに入力された文字列をファイルに書き込む方法が分からない。(ファイルに出力したい)
###エラーメッセージ
Traceback (most recent call last):
File "C:\Users\ユーザー名\Desktop\データ\Python\python3\notepad\notepad.py", line 47, in OnSave
dlg = wx.FileDialog(self, "名前を付けて保存", self.dirname, "", wx.FD_SAVE)
TypeError: FileDialog(): argument 5 has unexpected type 'int'
###コード
Python
1import os 2import wx 3 4class MainWindow(wx.Frame): 5 def __init__(self, parent, title): 6 wx.Frame.__init__(self, parent, title=title, size=(640, 480)) 7 self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE) 8 self.CreateStatusBar() # ステータスバーはウィンドウ下部に表示される 9 10 # メニューを設定 11 filemenu = wx.Menu() 12 13 # wx.ID_ABOUTとwx.ID_EXITはwxWidgetによって提供される標準ID 14 menuOpen = filemenu.Append(wx.ID_OPEN, "&Open", " ファイルを開く") 15 menuSave = filemenu.Append(wx.ID_SAVE, "&Save", " 名前を付けて保存") 16 filemenu.AppendSeparator() 17 menuAbout = filemenu.Append(wx.ID_ABOUT, "&About", " このプログラムについて") # (訳者注)&の次の文字がショートカットキーになる 18 menuExit = filemenu.Append(wx.ID_EXIT, "&Exit", " プログラムを終了") 19 20 # メニューバーを生成 21 menuBar = wx.MenuBar() 22 menuBar.Append(filemenu, "&File") # メニューバーに「ファイル」メニューを追加 23 self.SetMenuBar(menuBar) # フレームコンテンツとしてメニューバーを追加 24 25 # イベントを設定 26 self.Bind(wx.EVT_MENU, self.OnOpen, menuOpen) 27 self.Bind(wx.EVT_MENU, self.OnSave, menuSave) 28 self.Bind(wx.EVT_MENU, self.OnAbout, menuAbout) 29 self.Bind(wx.EVT_MENU, self.OnExit, menuExit) 30 31 self.Show(True) 32 33 def OnOpen(self, e): 34 #ファイルを開く 35 self.dirname = '' 36 dlg = wx.FileDialog(self, "開く", self.dirname, "", "*.txt", wx.FD_OPEN) 37 if dlg.ShowModal() == wx.ID_OK: 38 self.filename = dlg.GetFilename() 39 self.dirname = dlg.GetDirectory() 40 f = open(os.path.join(self.dirname, self.filename), 'r', encoding='utf-8') 41 self.control.SetValue(f.read()) 42 f.close() 43 dlg.Destroy() 44 45 def OnSave(self, e): 46 self.dirname = '' 47 dlg = wx.FileDialog(self, "名前を付けて保存", self.dirname, "", wx.FD_SAVE) 48 if dlg.ShowModal() == wx.ID_OK: 49 self.filename = dlg.GetFilename() 50 self.dirname = dlg.GetDirectory() 51 f = open(os.path.join(self.dirname, self.filename), 'w', encoding='utf-8') 52 f.write(self.control.GetValue()) 53 f.close() 54 dlg.Destroy() 55 56 def OnAbout(self, e): 57 # OKボタンを持つメッセージダイアログを表示する.wx.OKはwx.Widgetの標準ID 58 dlg = wx.MessageDialog(self, "スモールテキストエディタ", "サンプルエディタについて", wx.OK) 59 dlg.ShowModal() # 表示 60 dlg.Destroy() # イベント終了時にインスタンスを破棄 61 62 def OnExit(self, e): 63 self.Close(True) # フレームをクローズ 64 65app = wx.App(False) 66frame = MainWindow(None, "サンプルエディタ") 67app.MainLoop()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。