質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1760閲覧

'Panel_2' object has no attribute 'textbox'を解消したい

NinZIn2010

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/17 13:30

編集2021/02/17 13:41

前提・実現したいこと

現在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/ツールのバージョンなど)

太文字にしたところがエラーが実際に起きたところです。
プログラミングに興味を持ったばかりでインターネットのある解説やコードを見よう見まねで自分で組み上げたものとなっていて見にくい部分が多々あるかと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/02/17 13:32

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
NinZIn2010

2021/02/17 13:36

すみません、今訂正します
NinZIn2010

2021/02/17 13:41

訂正を行い更新しました
guest

回答2

0

ベストアンサー

textbox = wx.TextCtrl(self, -1, pos=(50,320), size=(500,30))
というのは、

self.textbox = wx.TextCtrl(self, -1, pos=(50,320), size=(500,30))

と書かなければなりません。
同様の間違いがたくさんあるので、全部修正してください。

投稿2021/02/17 13:50

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NinZIn2010

2021/02/17 13:51

わかりました。訂正してみます
NinZIn2010

2021/02/17 13:51

ありがとうございます
NinZIn2010

2021/02/17 14:24

無事訂正した結果エラーが出なくなりました。 ありがとうございました
guest

0

AttributeError: 'Panel_2' object has no attribute 'textbox'

'Panel_2' には 'textbox' というアトリビュートがありません、とおっしゃってます。
まずはこれをどうにかしましょう

投稿2021/02/17 13:48

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NinZIn2010

2021/02/17 13:50

そこからどのようにしてどうにかするのかが分かりません、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問