I am writing a program where I have the opportunity, to switch between two frames which are one two separate Files. The main file is called "Main_Menu" while the other file is called "first_page". When I import the classes from both classes into each other, then I get an circular import which leads to the program not working. Does anybody have a solution? The codes to both files are under this Text.
Main_Menu.py
import tkinter as tkfrom tkinter import PhotoImagefrom second_page import SecondPagefrom first_page import FirstPageclass Hauptfenster: def init(self, root): self.root = root self.root.title("Hauptfenster") # Bild laden self.background_image = PhotoImage(file="Background_Main.png") # Größe des Bildes abrufen self.width = self.background_image.width() self.height = self.background_image.height() # Haupt frame erstellen self.main_frame = tk.Frame(self.root, width=self.width, height=self.height) self.main_frame.pack_propagate(False) # Verhindert, dass der Rahmen seine Größe an die Widgets anpasst self.main_frame.pack() # Packe den Haupt frame, um ihn sichtbar zu machen # Hintergrundbild hinzufügen self.background_label = tk.Label(self.main_frame, image=self.background_image) self.background_label.place(x=0, y=0, relwidth=1, relheight=1) # Füllt das Bild den Rahmen aus # Rahmen für den ersten Knopf erstellen self.create_character_frame = tk.Frame(self.main_frame, bg="white", bd=0, relief="flat") self.create_character_frame.place(relx=0.4, rely=0.7, anchor="center") # Rahmen für den zweiten Knopf erstellen self.Archiv_frame = tk.Frame(self.main_frame, bg="white", bd=0, relief="flat") self.Archiv_frame.place(relx=0.6, rely=0.7, anchor="center") # Rahmen für den schließen Button self.close_frame = tk.Frame(self.main_frame, bg="white", bd=0, relief="flat") self.close_frame.place(relx=0.5, rely=0.9, anchor="center") # Rahmen für das Logo self.logo_frame = tk.Frame(self.main_frame, bg="white", bd=0, relief="flat") self.logo_frame.place(relx=0.5, rely=0.2, anchor="center") # Text für den ersten Knopf hinzufügen self.create_character_image = PhotoImage(file="character_text.png") self.create_character_button = tk.Button(self.create_character_frame, image=self.create_character_image, relief="flat", command=self.zeige_erste_seite) self.create_character_button.pack(pady=10) # Bild für den ersten Knopf hinzufügen self.first_image = PhotoImage(file="Bild_eins.png") self.first_image_label = tk.Label(self.main_frame, image=self.first_image, bd=0, highlightthickness=0) self.first_image_label.place(relx=0.4, rely=0.511, anchor="center") # Text für den zweiten Knopf hinzufügen self.Archiv_image = PhotoImage(file="Archiv_Text.png") # Beispielbild, ersetze es mit deinem Bild self.Archiv_button = tk.Button(self.Archiv_frame, image=self.Archiv_image, relief="flat", command=self.zeige_zweite_seite) self.Archiv_button.pack(pady=10) # Bild für den zweiten Knopf hinzufügen self.Sheet_image = PhotoImage(file="Bild_zwei.png") self.Sheet_image_label = tk.Label(self.main_frame, image=self.Sheet_image, bd=0, highlightthickness=0) self.Sheet_image_label.place(relx=0.6, rely=0.511, anchor="center") # Button zum Schließen des Programms hinzufügen self.close_image = PhotoImage(file="Escape.png") self.close_button = tk.Button(self.close_frame, image=self.close_image, command=root.destroy, relief="flat") self.close_button.pack(pady=10) # Logo einfügen self.logo_image = PhotoImage(file="logo.png") self.logo_image_label = tk.Label(self.main_frame, image=self.logo_image, bd=0, highlightthickness=0) self.logo_image_label.place(relx=0.5, rely=0.2, anchor="center")def zeige_erste_seite(self): # Alles im Haupt frame löschen for widget in self.main_frame.winfo_children(): widget.destroy() # Erstelle ein Objekt der Klasse für die erste Seite FirstPage(self.main_frame)def zeige_zweite_seite(self): # Alles im Haupt frame löschen for widget in self.main_frame.winfo_children(): widget.destroy() # Erstelle ein Objekt der Klasse für die zweite Seite SecondPage(self.main_frame)def main(): root = tk.Tk() app = Hauptfenster(root) root.mainloop()if name == "main": main()
first_page.py
import tkinter as tkfrom Main_Menu import Hauptfensterclass FirstPage(tk.Frame): def init(self, parent): self.parent = parent self.frame = tk.Frame(self.parent) self.frame.pack(expand=True, fill='both') # Neuen Inhalt für die zweite Seite hinzufügen label = tk.Label(self.frame, text="Das ist die erste Seite") label.pack() # Button zum Hauptmenü hinzufügen self.back_to_main_button = tk.Button(self.frame, text="Zurück zum Hauptmenü", command=self.back_to_main) self.back_to_main_button.pack()def back_to_main(self): # Alles im Frame löschen for widget in self.frame.winfo_children(): widget.destroy() # Erstelle ein Objekt der Klasse für das Hauptmenü Hauptfenster(self.parent)
I wanted to switch between those two while they are on separate files.