Rahmen um Frame erzeugen

Fragen zu Tkinter.
Antworten
NinoBaumann
User
Beiträge: 71
Registriert: Samstag 25. April 2020, 19:03

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)
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Argumente werden an Frame.__init__ übergeben:

Code: Alles auswählen

tk.Frame.__init__(self, master, highlightbackground="blue", highlightthickness=2)
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

und dann:

Code: Alles auswählen

tk.Frame.pack(self)
Gruss Peter
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
NinoBaumann
User
Beiträge: 71
Registriert: Samstag 25. April 2020, 19:03

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
Antworten