実現したいこと
python でアプリを作りかけているのですが、mainloopが、うまく作動していません。
発生している問題・分からないこと
エラーが出ています。
エラーメッセージ
error
1Traceback (most recent call last): 2 File "C:\Users\thide\Desktop\Sourcetree不動ファイル\ProgrammerUnionV1\python\pythonによるUSBにデータのリンク\アプリ制作用\アプリ中枢.py", line 103, in <module> 3 app.mainloop() 4AttributeError: 'MultiFrameApp' object has no attribute 'mainloop'
該当のソースコード
from アプリ関数フォルダーとデータ import データ複製 as COOPYF from アプリ関数フォルダーとデータ import ファイルパス管理 as PAS import tkinter as tk from tkinter import ttk class MultiFrameApp: def __init__(self, root): self.root = root self.frame1 = tk.Frame(root,width=1300, height=700, bg='green') self.frame2 = tk.Frame(root,width=1300, height=700, bg='green') self.frame3 = tk.Frame(root,width=1300, height=700, bg='green') self.options = ["実行", "追加", "削除"] #親のフレーム self.combobox = ttk.Combobox(root, values=self.options) self.combobox.current(0) self.combobox.bind('<<ComboboxSelected>>', self.Windowdrpe) self.combobox.place(x=0, y=10) # フレーム1のウィジェット(実行) Runbutton = tk.Button(self.frame1, text="ボタン", command = self.freame1RunButton) Runbutton.place(x=500, y=300) self.listbox = tk.Listbox(self.frame1, selectmode="single",width=50,font=("Arial",15)) for N,date in enumerate(PAS.NameAll(PAS.DateMain())): self.listbox.insert(N, date) self.listbox.place(x=1, y=50) self.frame1.pack(side=tk.BOTTOM,anchor=tk.NE) # フレーム2のウィジェット(追加) """ label2 = tk.Label(self.frame2, text="フレーム2です") label2.pack() button_to_frame1 = tk.Button(self.frame2, text="フレーム1へ", command=self.show_frame1) button_to_frame1.pack() button_to_frame3 = tk.Button(self.frame2, text="フレーム3へ", command=self.show_frame3) button_to_frame3.pack() """ # フレーム3のウィジェット(削除) """ label3 = tk.Label(self.frame3, text="フレーム3です") label3.pack() button_to_frame1 = tk.Button(self.frame3, text="フレーム1へ", command=self.show_frame1) button_to_frame1.pack() button_to_frame2 = tk.Button(self.frame3, text="フレーム2へ", command=self.show_frame2) button_to_frame2.pack() """ def freameChange(self,Number): if Number == 1: self.frame2.pack_forget() # フレーム2を隠す self.frame3.pack_forget() # フレーム3を隠す self.frame1.pack(side=tk.BOTTOM,anchor=tk.NE) # フレーム1を表示 elif Number == 2: self.frame1.pack_forget() # フレーム1を隠す self.frame3.pack_forget() # フレーム3を隠す self.frame2.pack(side=tk.BOTTOM,anchor=tk.NE) # フレーム2を表示 elif Number == 3: self.frame1.pack_forget() # フレーム1を隠す self.frame2.pack_forget() # フレーム2を隠す self.frame3.pack(side=tk.BOTTOM,anchor=tk.NE) # フレーム3を表示 else: exit("フレームアウト") def freame1RunButton(self): #入力データを取得 value = "" selection = self.listbox.curselection() if selection: index = selection[0] # インデックスに対応する項目の値を取得 value = self.listbox.get(index) print(value) print(type(value)) if not value == "": self.listbox.delete(0, tk.END) for N,date in enumerate(PAS.NameAll(PAS.DateMain())): self.listbox.insert(N, date) #データを作成 date = [] date = PAS.ND(PAS.DateMain(),value) sr = date[2] ds =date[3] print("IN") print(sr) print(ds) #データを元に、復元操作 COOPYF.maincopy(sr,ds) def Windowdrpe(self,event):#フレーム切り替えよう print("IN") state = self.combobox.get() if state == "実行": self.freameChange(1) elif state == "追加": self.freameChange(2) elif state == "削除": self.freameChange(3) app = MultiFrameApp(tk.Tk().geometry("1550x900")) app.root.mainloop()
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
得られませんでした。
補足
特になし
エラーメッセージでは app.mainloop() と表示されていますが、ソースコードでは app.root.mainloop() となっています。どちらがただしいのでしょう?
エラーメッセージ:
Traceback (most recent call last):
File "C:\Users\thide\Desktop\Sourcetree不動ファイル\ProgrammerUnionV1\python\pythonによるUSBにデータのリンク\アプリ制作用\アプリ中枢.py", line 103, in <module>
app.mainloop()
AttributeError: 'MultiFrameApp' object has no attribute 'mainloop'
ソースコード:
app = MultiFrameApp(tk.Tk().geometry("1550x900"))
app.root.mainloop()


以前の質問で私の回答を読まれてませんか?該当箇所のエラーの修正方法も回答済です
