Customtkinter Unterschiedlicher Text auf unterschiedlichen Frames

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Merkator
User
Beiträge: 151
Registriert: Sonntag 5. Dezember 2021, 17:15

Hey,

der Titel sagt bereits mein Ziel. Ich habe ein ähnliches Programm wie dieses hier: https://github.com/TomSchimansky/Custom ... example.py

Sonst hier nochmal der selbe Code:

Code: Alles auswählen

[code]import customtkinter
import os
from PIL import Image


class App(customtkinter.CTk):
    def __init__(self):
        super().__init__()

        self.title("image_example.py")
        self.geometry("700x450")

        # set grid layout 1x2
        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(1, weight=1)

        # load images with light and dark mode image
        image_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "test_images")
        self.logo_image = customtkinter.CTkImage(Image.open(os.path.join(image_path, "CustomTkinter_logo_single.png")), size=(26, 26))
        self.large_test_image = customtkinter.CTkImage(Image.open(os.path.join(image_path, "large_test_image.png")), size=(500, 150))
        self.image_icon_image = customtkinter.CTkImage(Image.open(os.path.join(image_path, "image_icon_light.png")), size=(20, 20))
        self.home_image = customtkinter.CTkImage(light_image=Image.open(os.path.join(image_path, "home_dark.png")),
                                                 dark_image=Image.open(os.path.join(image_path, "home_light.png")), size=(20, 20))
        self.chat_image = customtkinter.CTkImage(light_image=Image.open(os.path.join(image_path, "chat_dark.png")),
                                                 dark_image=Image.open(os.path.join(image_path, "chat_light.png")), size=(20, 20))
        self.add_user_image = customtkinter.CTkImage(light_image=Image.open(os.path.join(image_path, "add_user_dark.png")),
                                                     dark_image=Image.open(os.path.join(image_path, "add_user_light.png")), size=(20, 20))

        # create navigation frame
        self.navigation_frame = customtkinter.CTkFrame(self, corner_radius=0)
        self.navigation_frame.grid(row=0, column=0, sticky="nsew")
        self.navigation_frame.grid_rowconfigure(4, weight=1)

        self.navigation_frame_label = customtkinter.CTkLabel(self.navigation_frame, text="  Image Example", image=self.logo_image,
                                                             compound="left", font=customtkinter.CTkFont(size=15, weight="bold"))
        self.navigation_frame_label.grid(row=0, column=0, padx=20, pady=20)

        self.home_button = customtkinter.CTkButton(self.navigation_frame, corner_radius=0, height=40, border_spacing=10, text="Home",
                                                   fg_color="transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"),
                                                   image=self.home_image, anchor="w", command=self.home_button_event)
        self.home_button.grid(row=1, column=0, sticky="ew")

        self.frame_2_button = customtkinter.CTkButton(self.navigation_frame, corner_radius=0, height=40, border_spacing=10, text="Frame 2",
                                                      fg_color="transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"),
                                                      image=self.chat_image, anchor="w", command=self.frame_2_button_event)
        self.frame_2_button.grid(row=2, column=0, sticky="ew")

        self.frame_3_button = customtkinter.CTkButton(self.navigation_frame, corner_radius=0, height=40, border_spacing=10, text="Frame 3",
                                                      fg_color="transparent", text_color=("gray10", "gray90"), hover_color=("gray70", "gray30"),
                                                      image=self.add_user_image, anchor="w", command=self.frame_3_button_event)
        self.frame_3_button.grid(row=3, column=0, sticky="ew")

        self.appearance_mode_menu = customtkinter.CTkOptionMenu(self.navigation_frame, values=["Light", "Dark", "System"],
                                                                command=self.change_appearance_mode_event)
        self.appearance_mode_menu.grid(row=6, column=0, padx=20, pady=20, sticky="s")

        # create home frame
        self.home_frame = customtkinter.CTkFrame(self, corner_radius=0, fg_color="transparent")
        self.home_frame.grid_columnconfigure(0, weight=1)

        self.home_frame_large_image_label = customtkinter.CTkLabel(self.home_frame, text="", image=self.large_test_image)
        self.home_frame_large_image_label.grid(row=0, column=0, padx=20, pady=10)

        self.home_frame_button_1 = customtkinter.CTkButton(self.home_frame, text="", image=self.image_icon_image)
        self.home_frame_button_1.grid(row=1, column=0, padx=20, pady=10)
        self.home_frame_button_2 = customtkinter.CTkButton(self.home_frame, text="CTkButton", image=self.image_icon_image, compound="right")
        self.home_frame_button_2.grid(row=2, column=0, padx=20, pady=10)
        self.home_frame_button_3 = customtkinter.CTkButton(self.home_frame, text="CTkButton", image=self.image_icon_image, compound="top")
        self.home_frame_button_3.grid(row=3, column=0, padx=20, pady=10)
        self.home_frame_button_4 = customtkinter.CTkButton(self.home_frame, text="CTkButton", image=self.image_icon_image, compound="bottom", anchor="w")
        self.home_frame_button_4.grid(row=4, column=0, padx=20, pady=10)

        # create second frame
        self.second_frame = customtkinter.CTkFrame(self, corner_radius=0, fg_color="transparent")

        # create third frame
        self.third_frame = customtkinter.CTkFrame(self, corner_radius=0, fg_color="transparent")

        # select default frame
        self.select_frame_by_name("home")

    def select_frame_by_name(self, name):
        # set button color for selected button
        self.home_button.configure(fg_color=("gray75", "gray25") if name == "home" else "transparent")
        self.frame_2_button.configure(fg_color=("gray75", "gray25") if name == "frame_2" else "transparent")
        self.frame_3_button.configure(fg_color=("gray75", "gray25") if name == "frame_3" else "transparent")

        # show selected frame
        if name == "home":
            self.home_frame.grid(row=0, column=1, sticky="nsew")
        else:
            self.home_frame.grid_forget()
        if name == "frame_2":
            self.second_frame.grid(row=0, column=1, sticky="nsew")
        else:
            self.second_frame.grid_forget()
        if name == "frame_3":
            self.third_frame.grid(row=0, column=1, sticky="nsew")
        else:
            self.third_frame.grid_forget()

    def home_button_event(self):
        self.select_frame_by_name("home")

    def frame_2_button_event(self):
        self.select_frame_by_name("frame_2")

    def frame_3_button_event(self):
        self.select_frame_by_name("frame_3")

    def change_appearance_mode_event(self, new_appearance_mode):
        customtkinter.set_appearance_mode(new_appearance_mode)


if __name__ == "__main__":
    app = App()
    app.mainloop()
[/code]


Soweit sogut....alles funktioniert, alles sieht gut aus.

Jetzt ist meine einzige Frage/mein einziges Problem, dass ich gerne unterschiedlichen Text auf den einzelnden Frames hötte. Dabei soll zb. der Text in etwa so aussehen:

Überschrift (mitte oben, fett, kursiv, schriftgröße 24)
Informationen über das Programm (unter der Überschrift, schriftgröße 16)
Überschrift 2 (mitte unter dem text darüber, fett, kursiv, schriftgröße 24)
Informationen (unter der Überschrift 2, schriftgröße 16)
.....Abstand....
Grüner Button, der die def "Hamster" ausführt.

Lg und Danke
Merkator
User
Beiträge: 151
Registriert: Sonntag 5. Dezember 2021, 17:15

Kann niemand helfen? : (
Benutzeravatar
Dennis89
User
Beiträge: 1154
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

ich verstehe die Frage nicht ganz. Du hast ja schon Labels auf unterschiedlichen Frames erstellt.
Geht es hier nur um die Formatierung des Textes?

Ich habe die ganzen Bilder nicht und kann deinen Code deswegen auch nicht laufen lassen.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Merkator
User
Beiträge: 151
Registriert: Sonntag 5. Dezember 2021, 17:15

es geht darum, dass bei home der text abc steht bei frame 1 haus bei frame 2 katze usw, also fließtexte
Merkator
User
Beiträge: 151
Registriert: Sonntag 5. Dezember 2021, 17:15

Dennis89 hat geschrieben: Samstag 25. März 2023, 21:57 Hallo,

ich verstehe die Frage nicht ganz. Du hast ja schon Labels auf unterschiedlichen Frames erstellt.
Geht es hier nur um die Formatierung des Textes?

Ich habe die ganzen Bilder nicht und kann deinen Code deswegen auch nicht laufen lassen.

Grüße
Dennis
kannst du mir evtl bitte helfen?
Benutzeravatar
Dennis89
User
Beiträge: 1154
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

Code: Alles auswählen

customtkinter.CTkLabel(self.home_frame, text="abc")
So etwas ähnliches hast du schon eingebaut, macht dass nicht das was es soll?
Ich hab dieses 'customtkinter' nicht auf dem Laptop, gibts da keine Doku zu?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Merkator
User
Beiträge: 151
Registriert: Sonntag 5. Dezember 2021, 17:15

das wird dann aber auf allen frames angezeigt :roll:
Benutzeravatar
Dennis89
User
Beiträge: 1154
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

dann musst du das 'frame' als Referenz nehmen, auf dem es angezeigt werden soll.
Am besten du startest mal mit einem kleinen Programm, erstellst zwei Frames nebeneinander und schreibst was rein.
Dann, wenn es nicht klappt, ist das auch übersichtlicher und man kann anhand des Codes auf Fehlersuche gehen.


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Merkator
User
Beiträge: 151
Registriert: Sonntag 5. Dezember 2021, 17:15

was meinst du mit als referenz nehmen?
:D
Benutzeravatar
Dennis89
User
Beiträge: 1154
Registriert: Freitag 11. Dezember 2020, 15:13

In meinem Beispiel wäre es 'self.home_frame'.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Merkator
User
Beiträge: 151
Registriert: Sonntag 5. Dezember 2021, 17:15

Also jetzt habe ich das hier:

Code: Alles auswählen

                self.home_frame = customtkinter.CTkFrame(self, corner_radius=0, fg_color="transparent")
                self.home_frame.grid_columnconfigure(4, weight=1)

                self.home_frame_large_image_label = customtkinter.CTkLabel(self.home_frame, text="", image=self.large_test_image)
                self.home_frame_large_image_label.grid(row=1, column=4, padx=20, pady=10)


                text_var = tk.StringVar(value="CTkLabel")

                label = customtkinter.CTkLabel(master=self,
                               textvariable=text_var,
                               width=120,
                               height=25,
                               fg_color=("white", "gray75"),
                               corner_radius=8)
                label.place(relx=0.5, rely=0.5, anchor=tk.CENTER)


klappt aber das erscheint überall und nicht nur auf dem home frame
Antworten