簡體   English   中英

為什么我在Python tkinter中遇到此錯誤:KeyError: <class '__main__.AAA_Page'> ?

[英]Why am I getting this error with Python tkinter: KeyError: <class '__main__.AAA_Page'>?

我在tkinter比較新。 我的項目是利用tkinter GUI並制作一個三角形解算器,它將解決三角形環境下的所有邊和角度。 這是我的代碼:

import tkinter as tk
LARGE_FONT = ("Verdana", 14)
SMALL_FONT = ("Verdana", 8)
class CreatePT(tk.Tk):
def __init__(self, *args, **kwargs):
    tk.Tk.__init__(self, *args, *kwargs)
    container = tk.Frame(self)

    container.pack(side="top",fill="both", expand = True)

    container.grid_rowconfigure(0,weight=1)
    container.grid_columnconfigure(0,weight=1)

    self.frames = {}
    #This for loop allows the program to access the necessary page
    for F in (WelcomePage, AAA_Page):
        frame = F(container,self)

        self.frames[F] = frame

        frame.grid(row=0, column = 0, sticky = "nsew")

    self.show_frame(WelcomePage)

def show_frame(self,cont):
    frame = self.frames[cont]
    frame.tkraise()

class WelcomePage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = tk.Label(self, text = "Welcome to the Triangle Solver",font=LARGE_FONT)
        label.pack(pady = 10, padx = 10)

    AAA_button = tk.Button(self, text = "AAA(Angle-Angle-Angle",
        command = lambda: controller.show_frame(AAA_Page))
    AAA_button.pack()

    AAS_button = tk.Button(self, text = "AAS(Angle-Angle-Side)",
        command = lambda: controller.show_frame(AAS_Page))
    AAS_button.pack()

    ASA_button = tk.Button(self, text = "ASA(Angle-Angle-Side)",
        command = lambda: controller.show_frame(ASA_Page))
    ASA_button.pack()

    SSA_button = tk.Button(self, text = "SSA(Side-Side-Angle)",
        command = lambda: controller.show_frame(SSA_Page))
    SSA_button.pack()

    SAS_button = tk.Button(self, text = "SAS(Side-Angle-Side)",
        command = lambda: controller.show_frame(SAS_Page))
    SAS_button.pack()

    SSS_button = tk.Button(self, text = "SSS(Side-Side-Side)",
        command = lambda: controller.show_frame(SSS_Page))
    SSS_button.pack()
class AAA_Page(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = tk.Label(self, text = "AAA(Angle-Angle-Angle)",font=LARGE_FONT)
        label.pack(pady = 10, padx = 10)

    button1 = tk.Button(self, text = "Back to Home",
        command = lambda: controller.show_frame(WelcomePage))
    button1.pack()
    warning_label = tk.Label(self, text = "Due to the given measurements, the program can only solve for the remaining angle", font = SMALL_FONT)#possible to make red?
    warning_label.pack()
    angle1_label = tk.Label(self, text = "Angle 1 =")
    angle1_label.pack(side = right)
    angle1_entry = tk.Entry(self, bd = 5)
    angle1_entry.pack(side = left)
class AAS_Page(tk.Frame):#NOTDONE
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = tk.Label(self, text = "AAS(Angle-Angle-Side)",font=LARGE_FONT)
        label.pack(pady = 10, padx = 10)

    button1 = tk.Button(self, text = "Back to Home",
        command = lambda: controller.show_frame(WelcomePage))
    button1.pack()
#Regular Page

class ASA_Page(tk.Frame):#NOTDONE
    #Intialization method
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = tk.Label(self, text = "ASA(Angle-Side-Angle)",font=LARGE_FONT)
        label.pack(pady = 10, padx = 10)

    button1 = tk.Button(self, text = "Back to Home",
        command = lambda: controller.show_frame(WelcomePage))
    button1.pack()
#Regular Page

class SSA_Page(tk.Frame):#NOTDONE
    #Intialization method
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = tk.Label(self, text = "SSA(Side-Side-Angle)",font=LARGE_FONT)
        label.pack(pady = 10, padx = 10)

    button1 = tk.Button(self, text = "Back to Home",
        command = lambda: controller.show_frame(WelcomePage))
    button1.pack()
#Regular Page

class SAS_Page(tk.Frame):#NOTDONE
    #Intialization method
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = tk.Label(self, text = "AAA(Side-Angle-Side)",font=LARGE_FONT)
        label.pack(pady = 10, padx = 10)

    button1 = tk.Button(self, text = "Back to Home",
        command = lambda: controller.show_frame(WelcomePage))
    button1.pack()
#Regular Page

class SSS_Page(tk.Frame):#NOTDONE
    #Intialization method
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = tk.Label(self, text = "SSS(Side-Side-Side)",font=LARGE_FONT)
        label.pack(pady = 10, padx = 10)

    button1 = tk.Button(self, text = "Back to Home",
        command = lambda: controller.show_frame(WelcomePage))
    button1.pack()

create = CreatePT()
create.mainloop()

GUI出來很好,但每當我嘗試切換到AAA_Page框架進行測試時,我都會收到以下錯誤:

Traceback (most recent call last):
File "C:\Users\bamak\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
   return self.func(*args)
File "C:\Users\bamak\Desktop\CodingProjects\Triangle Solver--Create PT.py", line 49, in <lambda>
   command = lambda: controller.show_frame(AAA_Page))
File "C:\Users\bamak\Desktop\CodingProjects\Triangle Solver--Create PT.py", line 37, in show_frame
   frame = self.frames[cont]
KeyError:(<)class '__main__.AAA_Page'(>)

我查看了我的代碼,但我沒有看到我的錯誤。 任何幫助將不勝感激,謝謝!

不要在類中放置方法之外的任何代碼。 所有這些按鈕需要再縮進一次,因此它們是__init__方法的一部分,如下所示:

class WelcomePage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = tk.Label(self, text = "Welcome to the Triangle Solver",font=LARGE_FONT)
        label.pack(pady = 10, padx = 10)

        AAA_button = tk.Button(self, text = "AAA(Angle-Angle-Angle",
            command = lambda: controller.show_frame(AAA_Page))
        AAA_button.pack()

我收到 KeyError: <class '__main__. in tkinter while trying to raise another frame?< div><div id="text_translate"><p> 我收到此錯誤 -</p><pre> KeyError: &lt;class '__main__.PublishPage'&gt;</pre><p> 這是我的代碼 -</p><pre> p = 0 #Now, Adding the different pages for the game class HeadlineGame(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) container = tk.Frame(self) container.pack(side="top", fill="both", expand=True) container.grid_rowconfigure(0, weight=1) container.grid_columnconfigure(0, weight=1) self.frames = {} frame = StartPage(container, self) self.frames[StartPage] = frame frame.grid(row=0, column=0, sticky="nsew") self.show_frame(StartPage) def show_frame(self, controller): frame = self.frames[controller] frame.tkraise() class StartPage(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) publishbutton = tk.Button(self, image=publishimg, borderwidth=0, command= lambda: controller.show_frame(PublishPage)) publishbutton.image = publishimg publishbutton.place(x=503, y=315) class PublishPage(tk.Frame): def __init__(self, parent, controller): button2 = tk.Button(self, text="Test") button2.grid(row=0, column=0) app = HeadlineGame() app.geometry('1366x768') app.mainloop()</pre><p> 我試圖解決這個問題,但無濟於事。 這是 lambda 命令的問題嗎? 我想要它,以便當我按下按鈕時,它會將我帶到第二幀,即使這個特定問題無法解決,有沒有辦法實現這一點?</p><p> 謝謝你。</p><p> <strong>編輯</strong>回溯錯誤:</p><pre> &gt; Exception in Tkinter callback Traceback (most recent call last): File &gt; "C:\Users\DELL\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", &gt; line 1883, in __call__ &gt; return self.func(*args) File "C:\Users\DELL\Desktop\Python\intro.py", line 276, in &lt;lambda&gt; &gt; publishbutton = tk.Button(self, image=publishimg, borderwidth=0, command= lambda: controller.show_frame(PublishPage)) File &gt; "C:\Users\DELL\Desktop\Python\intro.py", line 197, in show_frame &gt; frame = self.frames[controller] KeyError: &lt;class '__main__.PublishPage'&gt;</pre></div></class>

[英]I am getting KeyError: <class '__main__. in tkinter while trying to raise another frame?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 密鑰錯誤:<class '__main__.Page2'> 在 Python Tkinter 中 Python tkinter“ KeyError: 我收到 KeyError: <class '__main__. in tkinter while trying to raise another frame?< div><div id="text_translate"><p> 我收到此錯誤 -</p><pre> KeyError: &lt;class '__main__.PublishPage'&gt;</pre><p> 這是我的代碼 -</p><pre> p = 0 #Now, Adding the different pages for the game class HeadlineGame(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) container = tk.Frame(self) container.pack(side="top", fill="both", expand=True) container.grid_rowconfigure(0, weight=1) container.grid_columnconfigure(0, weight=1) self.frames = {} frame = StartPage(container, self) self.frames[StartPage] = frame frame.grid(row=0, column=0, sticky="nsew") self.show_frame(StartPage) def show_frame(self, controller): frame = self.frames[controller] frame.tkraise() class StartPage(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) publishbutton = tk.Button(self, image=publishimg, borderwidth=0, command= lambda: controller.show_frame(PublishPage)) publishbutton.image = publishimg publishbutton.place(x=503, y=315) class PublishPage(tk.Frame): def __init__(self, parent, controller): button2 = tk.Button(self, text="Test") button2.grid(row=0, column=0) app = HeadlineGame() app.geometry('1366x768') app.mainloop()</pre><p> 我試圖解決這個問題,但無濟於事。 這是 lambda 命令的問題嗎? 我想要它,以便當我按下按鈕時,它會將我帶到第二幀,即使這個特定問題無法解決,有沒有辦法實現這一點?</p><p> 謝謝你。</p><p> <strong>編輯</strong>回溯錯誤:</p><pre> &gt; Exception in Tkinter callback Traceback (most recent call last): File &gt; "C:\Users\DELL\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", &gt; line 1883, in __call__ &gt; return self.func(*args) File "C:\Users\DELL\Desktop\Python\intro.py", line 276, in &lt;lambda&gt; &gt; publishbutton = tk.Button(self, image=publishimg, borderwidth=0, command= lambda: controller.show_frame(PublishPage)) File &gt; "C:\Users\DELL\Desktop\Python\intro.py", line 197, in show_frame &gt; frame = self.frames[controller] KeyError: &lt;class '__main__.PublishPage'&gt;</pre></div></class> GUI 部分有效,為什么我會收到 &quot;y = x[&quot;main&quot;] KeyError: &#39;main&#39; python&quot; 為什么我在Pandas Python中遇到鍵盤錯誤 為什么我會收到此錯誤? (KeyError:'用戶名') 為什么我會收到此 KeyError? 為什么我得到 KeyError: 0 為什么我會得到 keyError 呢? Python KeyError:“ TOT”-這是什么? 我為什么要得到它?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM