###前提・実現したいこと
ドラッグアンドドロップまたはダイアログでファイルを選択した際に、テキストボックスにファイルのアドレスを表示させようとしています。
###発生している問題・エラーメッセージ
ファイルをダイアログから選択した場合にテキストボックスにファイルのアドレスを表示できません。
AttributeError: type object 'DnDPanel' has no attribute 'fileTextCtrl'
###該当のソースコード
Python
1import wx 2import os 3 4######################################################################## 5class MyFileDropTarget(wx.FileDropTarget): 6 """""" 7 8 #---------------------------------------------------------------------- 9 def __init__(self, window): 10 """Constructor""" 11 wx.FileDropTarget.__init__(self) 12 self.window = window 13 14 #---------------------------------------------------------------------- 15 def OnDropFiles(self, x, y, filenames): 16 for filepath in filenames: 17 self.window.updateText(filepath + '\n') 18 19 # Return True to accept the data, False to veto it. 20 return True 21 22 23######################################################################## 24class DnDPanel(wx.Panel): 25 26 #---------------------------------------------------------------------- 27 def __init__(self, parent): 28 wx.Panel.__init__(self, parent=parent) 29 file_drop_target = MyFileDropTarget(self) 30 self.fileTextCtrl = wx.TextCtrl(self,style=wx.TE_MULTILINE|wx.HSCROLL|wx.TE_READONLY) 31 self.fileTextCtrl.SetDropTarget(file_drop_target) 32 33 sizer = wx.BoxSizer(wx.VERTICAL) 34 sizer.Add(self.fileTextCtrl, 1, wx.EXPAND|wx.ALL, 5) 35 self.SetSizer(sizer) 36 37 #---------------------------------------------------------------------- 38 def updateText(self, text): 39 #Overwtite a text 40 self.fileTextCtrl.SetValue(text) 41 #Add a text 42 #self.fileTextCtrl.WriteText(text) 43 44######################################################################## 45class DnDFrame(wx.Frame): 46 47 #---------------------------------------------------------------------- 48 def __init__(self): 49 wx.Frame.__init__(self, parent=None, title="GUI test") 50 51 self.InitMenu() 52 53 panel = DnDPanel(self) 54 self.Show() 55 56 #---------------------------------------------------------------------- 57 def InitMenu(self): 58 # Menubar 59 menubar = wx.MenuBar() 60 fileMenu = wx.Menu() 61 f_item1 = fileMenu.Append(wx.ID_ANY, '&Load file(L)', 'Load image file') 62 fileMenu.AppendSeparator() 63 f_item3 = fileMenu.Append(wx.ID_ANY, '&Quit(Q)', 'Quit application') 64 menubar.Append(fileMenu, '&File(F)') 65 66 helpMenu = wx.Menu() 67 h_item1 = helpMenu.Append(wx.ID_ANY, '&About(A)', 'About this program') 68 menubar.Append(helpMenu, '&Help(H)') 69 70 self.SetMenuBar(menubar) 71 72 self.Bind(wx.EVT_MENU, self.OnLoad, f_item1) 73 self.Bind(wx.EVT_MENU, self.OnQuit, f_item3) 74 self.Bind(wx.EVT_MENU, self.OnAbout, h_item1) 75 76 self.SetSize((300, 250)) 77 self.SetTitle('GUI tester') 78 self.Centre() 79 80 # Status bar 81 self.CreateStatusBar() 82 self.SetStatusText("Please drop/load a image file.") 83 self.GetStatusBar().SetBackgroundColour(None) 84 85 self.Show(True) 86 87 #---------------------------------------------------------------------- 88 def OnLoad(self, event): 89 # Call dialog 90 self.dirname = '' 91 dlg = wx.FileDialog(self, "Please select a file.", self.dirname, "", "*.*", wx.FD_OPEN ) 92 93 # Selected 94 if dlg.ShowModal() == wx.ID_OK: 95 self.filename = dlg.GetFilename() 96 self.dirname = dlg.GetDirectory() 97 with open(os.path.join(self.dirname, self.filename), 'r') as f: 98 self.SetStatusText(self.dirname + "\\" + self.filename) 99 DnDPanel.updateText(wx.Panel,self.dirname + "\\" + self.filename + '\n') 100 101 # Cancelled 102 else: 103 self.SetStatusText("Please drop/load a image file.") 104 dlg.Destroy() 105 106 #---------------------------------------------------------------------- 107 # Event: Quit 108 def OnQuit(self, event): 109 self.Close() 110 111 #---------------------------------------------------------------------- 112 # Event: About 113 def OnAbout(self, event): 114 box=wx.MessageDialog(None,'HOOAH!','About this program',wx.OK) 115 anser=box.ShowModal() 116 117#---------------------------------------------------------------------- 118if __name__ == "__main__": 119 app = wx.App(False) 120 frame = DnDFrame() 121 app.MainLoop() 122
###試したこと
ここ数日間延べ10時間近くgoogleで検索しながらstackoverflowなどの先行事例を調べて調整しましたがうまくいきませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
Win10(64bit)
Python 3.5.3(64bit)
wxPython 4.0.0a1 (Phoenix)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/05/06 09:00