前提・実現したいこと
現在wxpythonを用いて入力管理アプリケーションの作成を行っています。
最初は各システムごとに.pyファイルを作成それぞれを読み込みを行っていましたがそれではexe化した際に不便になると感じclass分けを行い一つのファイルで実行できるようにプログラムを組んでいたところ「'Panel_2' object has no attribute 'textbox'」のエラーが出てしまいました。
発生している問題・エラーメッセージ
エラーメッセージ
AttributeError: 'Panel_2' object has no attribute 'textbox'
該当のソースコード
python
1import wx 2import os 3import subprocess 4import datetime 5 6desktop_path = os.getenv("HOMEDRIVE") + os.getenv("HOMEPATH") + "\Desktop" 7 8class mainFrame(wx.Frame): 9 def __init__(self): 10 super().__init__(None, wx.ID_ANY, 'test', size=(900,600), style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN) 11 12 self.CreateStatusBar() 13 self.SetStatusText('test') 14 self.GetStatusBar().SetBackgroundColour(None) 15 16 self.sizer = wx.BoxSizer(wx.VERTICAL) 17 self.SetSizer(self.sizer) 18 19 self.set_screen(Panel_1) 20 icon = wx.Icon(desktop_path +r"\test\Mainsystemf\音.png", wx.BITMAP_TYPE_PNG) 21 self.SetIcon(icon) 22 23 def set_screen(self,panel): 24 self.sizer.Clear(False) 25 self.DestroyChildren() 26 27 self.now_panel=panel(self) 28 self.sizer.Add(self.now_panel,1,wx.EXPAND) 29 self.sizer.Layout() 30 31 32 33class Panel_1(wx.Panel): 34 def __init__(self, parent): 35 super().__init__(parent, wx.ID_ANY) 36 self.SetBackgroundColour('#75b1a9') 37 self.parent=parent 38 39 image = wx.Image(desktop_path +r"\test\Mainsystemf\logo.png") 40 bitmap = image.ConvertToBitmap() 41 wx.StaticBitmap(self, -1, bitmap, pos=(130,-120), size=(600,400)) 42 43 button1 = wx.Button(self, -1, "インターネットサービス", pos=(389,390)) 44 button1.SetSize((300,50)) 45 button1.SetToolTip("インターネットサービスを構想中") 46 button1.Bind(wx.EVT_BUTTON, self.click_button1) 47 button1.SetBackgroundColour('#acd0c0') 48 49 button2 = wx.Button(self, -1,"記録をする", pos =(200,300)) 50 button2.SetSize((190,140)) 51 button2.SetToolTip("A") 52 font = wx.Font(19, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_SLANT, wx.FONTWEIGHT_LIGHT) 53 button2.SetFont(font) 54 button2.Bind(wx.EVT_BUTTON, self.click_button2) 55 button2.SetBackgroundColour('#acd0c0') 56 57 button3 = wx.Button(self, -1, "検索する", pos=(389,300)) 58 button3.SetSize((150,90)) 59 button3.SetToolTip("過去に記録したデータを検索して見てみましょう") 60 button3.Bind(wx.EVT_BUTTON, self.click_button3) 61 button3.SetBackgroundColour('#acd0c0') 62 63 button4 = wx.Button(self, -1, "URL", pos=(538,300)) 64 button4.SetSize((150,90)) 65 button4.SetToolTip("B") 66 button4.Bind(wx.EVT_BUTTON,self. click_button4) 67 button4.SetBackgroundColour('#acd0c0') 68 69 def click_button1(self, event): 70 self.parent.set_screen(Panel_2) 71 def click_button2(self, event): 72 self.parent.set_screen(Panel_2) 73 def click_button3(self, event): 74 self.parent.set_screen(Panel_2) 75 def click_button4(self, event): 76 self.parent.set_screen(Panel_2) 77 78class Panel_2(wx.Panel): 79 def __init__(self, parent): 80 super().__init__(parent, wx.ID_ANY) 81 self.parent=parent 82 self.SetBackgroundColour('#75b1a9') 83 s_text_1 = wx.StaticText(self, wx.ID_ANY, '本日の記録欄', pos=(10,8)) 84 font = wx.Font(20, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_HEAVY) 85 s_text_1.SetFont(font) 86 87 txt1 = wx.StaticText(self,wx.ID_ANY, "1,記録を行うものを選択してください!", pos=(40,80)) 88 font = wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_EXTRABOLD) 89 txt1.SetFont(font) 90 91 select = ("A", "B", "C","D", "E", "F", "G","") 92 combobox1 = wx.ComboBox(self, wx.ID_ANY, '選択してください',choices=select, style=wx.CB_READONLY, pos=(50,100), size=(500,100)) 93 94 txt2 = wx.StaticText(self,wx.ID_ANY, "2,数値を入力してください!", pos=(40,150)) 95 font = wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_EXTRABOLD) 96 txt2.SetFont(font) 97 98 numbertxt1 = wx.SpinCtrl(self,wx.ID_ANY, value="", min=0, max=2000000, pos=(50,170), size=(200,30)) 99 font = wx.Font(20, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) 100 numbertxt1.SetFont(font) 101 102 txt3 = wx.StaticText(self,wx.ID_ANY, "3,現在の状態を入力してください!", pos=(40,230)) 103 font = wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_EXTRABOLD) 104 txt3.SetFont(font) 105 106 select2 = ("よい", "まーまー", "可","すこしだめ", "だめ", "全然", "失敗","") 107 combobox2 = wx.ComboBox(self, wx.ID_ANY, '選択してください',choices=select2, style=wx.CB_READONLY, pos=(50,250), size=(500,100)) 108 109 txt4 = wx.StaticText(self,wx.ID_ANY, "4,題名を入力してください", pos=(40,300)) 110 font = wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_EXTRABOLD) 111 txt4.SetFont(font) 112 113 textbox = wx.TextCtrl(self, -1, pos=(50,320), size=(500,30)) 114 font3 = wx.Font(19, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) 115 textbox.SetFont(font3) 116 117 txt5 = wx.StaticText(self,wx.ID_ANY, "5,コメント", pos=(620,80)) 118 font = wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_EXTRABOLD) 119 txt5.SetFont(font) 120 121 textbox2 = wx.TextCtrl(self, -1 ,style=wx.TE_MULTILINE, pos=(630,100), size=(230,200)) 122 font4 = wx.Font(14, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) 123 textbox2.SetFont(font4) 124 125 button1 = wx.Button(self, -1, "スタートに戻る", pos=(670,430)) 126 button1.SetSize((200,60)) 127 font3 = wx.Font(10, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_SLANT, wx.FONTWEIGHT_HEAVY) 128 button1.SetFont(font3) 129 button1.SetToolTip("スタート画面に戻ります") 130 button1.Bind(wx.EVT_BUTTON, self.click_button5) 131 button1.SetBackgroundColour('#acd0c0') 132 133 button2 = wx.Button(self, -1, "保存を行う", pos=(30,430)) 134 button2.SetSize((600,60)) 135 font4 = wx.Font(18, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_SLANT, wx.FONTWEIGHT_HEAVY) 136 button2.SetFont(font4) 137 button2.SetToolTip("入力した値を保存します") 138 button2.Bind(wx.EVT_BUTTON, self.click_button6) 139 button2.SetBackgroundColour('#acd0c0') 140 141 button3 = wx.Button(self, -1, "入力した値をクリア", pos=(430,360)) 142 button3.SetSize((200,60)) 143 font4 = wx.Font(10, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_HEAVY) 144 button3.SetFont(font4) 145 button3.SetToolTip("入力した値をクリアする") 146 button3.Bind(wx.EVT_BUTTON, self.click_button7) 147 button3.SetBackgroundColour('#acd0c0') 148 149 def click_button5(self, event): 150 self.parent.set_screen(Panel_1) 151 152 def click_button6(self, event): 153 otogename = self.combobox1.GetValue() 154 sukoa = self.numbertxt1.GetValue() 155 zyoutai = self.combobox2.GetStringSelection() 156 kyokumei = self.textbox.GetValue() 157 koment = self.textbox2.GetValue() 158 time = self.datetime.datetime.now() 159 os.makedirs(desktop_path+r"\test\ " + otogename , exist_ok=True) 160 f = open( desktop_path+r"\test\ " + otogename +"\ "+kyokumei +".txt" ,'a', encoding='UTF-8') 161 f.write(kyokumei+"\n") 162 datalist = ['スコア:'+str(sukoa)+'\n', '状態:'+zyoutai+'\n','コメント:'+koment,'\n記録日時・・・'+ str(time) +'\n\n\n\n'] 163 f.writelines(datalist) 164 f.close() 165 166 def click_button7(self, event): 167 self.textbox.Clear() 168 self.textbox2.Clear() 169 self.combobox1.SetStringSelection("") 170 self.combobox2.SetStringSelection("") 171 self.numbertxt1.SetValue(0) 172
試したこと
色々と書き方を変えてみたり、試行錯誤をしてみましたが改善できませんでした。
補足情報(FW/ツールのバージョンなど)
太文字にしたところがエラーが実際に起きたところです。
プログラミングに興味を持ったばかりでインターネットのある解説やコードを見よう見まねで自分で組み上げたものとなっていて見にくい部分が多々あるかと思います。
回答2件
あなたの回答
tips
プレビュー