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

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

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

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

Q&A

1回答

345閲覧

mainloopのエラー

HidetoshiTakai

総合スコア0

Python

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

0グッド

0クリップ

投稿2024/12/15 13:29

実現したいこと

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等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

得られませんでした。

補足

特になし

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

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

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

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

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

melian

2024/12/15 13:39

エラーメッセージでは 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()  
teamikl

2024/12/15 20:12 編集

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

回答1

0

一応回答しておくと、MultiFrameApp は 引数にroot を期待するところ、
geometry の戻り値を渡してしまってます。
tkinter でメソッドチェーンのようなことはできません。

修正方法

python

1root = tk.Tk() 2app = MultiFrameApp(root) 3root.geometry("1550x900") 4root.mainloop()

投稿2024/12/15 20:12

teamikl

総合スコア8817

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

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

HidetoshiTakai

2024/12/29 23:03

すみません。解決しました。度々すみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問