Seite 1 von 1

Customtkinter Unterschiedlicher Text auf unterschiedlichen Frames

Verfasst: Mittwoch 22. März 2023, 21:49
von Merkator
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

Re: Customtkinter Unterschiedlicher Text auf unterschiedlichen Frames

Verfasst: Samstag 25. März 2023, 09:22
von Merkator
Kann niemand helfen? : (

Re: Customtkinter Unterschiedlicher Text auf unterschiedlichen Frames

Verfasst: Samstag 25. März 2023, 21:57
von Dennis89
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

Re: Customtkinter Unterschiedlicher Text auf unterschiedlichen Frames

Verfasst: Mittwoch 29. März 2023, 15:52
von Merkator
es geht darum, dass bei home der text abc steht bei frame 1 haus bei frame 2 katze usw, also fließtexte

Re: Customtkinter Unterschiedlicher Text auf unterschiedlichen Frames

Verfasst: Donnerstag 30. März 2023, 19:11
von Merkator
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?

Re: Customtkinter Unterschiedlicher Text auf unterschiedlichen Frames

Verfasst: Donnerstag 30. März 2023, 22:03
von Dennis89
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

Re: Customtkinter Unterschiedlicher Text auf unterschiedlichen Frames

Verfasst: Freitag 31. März 2023, 16:50
von Merkator
das wird dann aber auf allen frames angezeigt :roll:

Re: Customtkinter Unterschiedlicher Text auf unterschiedlichen Frames

Verfasst: Freitag 31. März 2023, 18:12
von Dennis89
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

Re: Customtkinter Unterschiedlicher Text auf unterschiedlichen Frames

Verfasst: Freitag 31. März 2023, 21:07
von Merkator
was meinst du mit als referenz nehmen?
:D

Re: Customtkinter Unterschiedlicher Text auf unterschiedlichen Frames

Verfasst: Samstag 1. April 2023, 14:08
von Dennis89
In meinem Beispiel wäre es 'self.home_frame'.

Grüße
Dennis

Re: Customtkinter Unterschiedlicher Text auf unterschiedlichen Frames

Verfasst: Mittwoch 5. April 2023, 12:19
von Merkator
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