Seite 1 von 1

Rahmen um Frame erzeugen

Verfasst: Dienstag 6. Juni 2023, 13:59
von NinoBaumann
Hallo,

ich möchte gerne um meine Frames ein Rahmen ziehen. Das geht ja mit <highlightbackground> und <highlightthickness>.

Code: Alles auswählen

from tkinter import *

top = Tk()
top.geometry("700x350")

frame1 = Frame(top, highlightbackground="blue", highlightthickness=2)
frame1.pack(padx=20, pady=20)
Wie gebe ich das aber ein, wenn ich das Frame an eine Klasse vererbe?

Code: Alles auswählen

class MealFrame(tk.Frame):
    def __init__(self, master, name, image_path):
        tk.Frame.__init__(self, master)
        self.name = name
        self._food_image = ImageTk.PhotoImage(
            Image.open(image_path).resize((300, 200), Image.Resampling.LANCZOS)
        )
        tk.Label(self, image=self._food_image).pack()
        self._selected_var = tk.BooleanVar()
        tk.Checkbutton(self, text=name, variable=self._selected_var).pack(side = tk.LEFT)
        self._number_servings = tk.Entry(self, justify='center', width=10)
        self._number_servings.insert(0, 2)
        self._number_servings.pack(side = tk.RIGHT)
        tk.Label(self, text='Portionen: ', bg="light grey").pack(side = tk.RIGHT)

Re: Rahmen um Frame erzeugen

Verfasst: Dienstag 6. Juni 2023, 14:53
von Sirius3
Die Argumente werden an Frame.__init__ übergeben:

Code: Alles auswählen

tk.Frame.__init__(self, master, highlightbackground="blue", highlightthickness=2)

Re: Rahmen um Frame erzeugen

Verfasst: Dienstag 6. Juni 2023, 15:02
von peterpy
und dann:

Code: Alles auswählen

tk.Frame.pack(self)
Gruss Peter

Re: Rahmen um Frame erzeugen

Verfasst: Dienstag 6. Juni 2023, 15:08
von __blackjack__
@peterpy: Nein, ganz sicher nicht. Weder ruft man die Methode über die Klasse auf, noch macht man das in der `__init__()` des Widgets selbst. Kein anderes Widget layoutet sich selbst. Das ist die Aufgabe des Aufrufers. `pack()` kann ja auch falsch sein wenn das Widget in ein anderes gesteckt wird wo `grid()` verwendet werden soll.

Re: Rahmen um Frame erzeugen

Verfasst: Mittwoch 7. Juni 2023, 06:06
von NinoBaumann
Sirius3 hat geschrieben: Dienstag 6. Juni 2023, 14:53 Die Argumente werden an Frame.__init__ übergeben:

Code: Alles auswählen

tk.Frame.__init__(self, master, highlightbackground="blue", highlightthickness=2)
Hallo Sirius,

danke für die Hilfe.

VG
Nino