Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 14243

Switching between two frames on seperate files in tkinter

$
0
0

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.


Viewing all articles
Browse latest Browse all 14243

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>