Python Tkinter: Label in Frame?


23.01.2022, 21:09

Ich habe zwischen frame und label testweise ein zweites Frame eingebaut:

frame2 = tkinter.Frame(frame, width=100, height=20)
frame2.pack()

Die Fläche von frame2 ist dann nicht eingefärbt. Dafür ist es dann links und rechts von meinem label grün. Darunter aber nicht.Wie kann das denn funktionieren?

1 Antwort

Die pack-Funktion sorgt dafür, dass dein Widget automatisch verkleinert wird (auf die Fläche, die es wirklich benötigt - dabei nehmen die Kindelemente mit Einfluss auf die Größe; = geometry propagation). Dem kannst du mit pack_propagate entgegenwirken:

# ...

frame = tkinter.Frame(root, width=100, height=80, bg='green')
frame.pack_propagate(0)
frame.pack()
label = tkinter.Label(frame, text='TESTTESTTEST')
label.pack()

# ...

Beachte, dass es bei Einsatz dieser Funktion notwendig ist, Höhe und Breite explizit anzugeben, andernfalls ist der Frame gar nicht mehr sichtbar.

Eine transparente Label-Fläche kannst du übrigens ebenso nicht kreieren. Entweder du setzt die Hintergrundfarbe ebenso auf grün oder du verwendest stattdessen eine Canvas-Komponente, auf der du Text zeichnest.