@Cybernuschel: Daran wird ein Zeilenumbruch nichts ändern, weil die 27 Pixel Höhe ja auch schon viel zu wenig Platz für zwei Zeilen ist. Absolute Positions- und Grössenangaben in Pixeln sind halt fast immer ein Problem und sollten nicht gemacht werden. Wenn schon absolute Positions- und Grössenangaben, dann wenigstens in einer ”physikalischen” Grösse, unabhängig von der Monitorauflösung.
Und dann gibt man die Labelgrösse nicht vor, weil man dann ja nie so wirklich weiss ob der Text da nun rein passt oder nicht. Man kann angeben ab welcher Breite der Text umgebrochen werden soll. Da bitte dann auch eine ”physikalische” Grösse und nicht in Pixeln.
Sonstige Anmerkungen zum Quelltext: Sternchen-Importe sind Böse™. Da holt man sich gerade bei `tkinter` fast 140 Namen ins Modul von denen nur ein kleiner Bruchteil verwendet wird. Auch Namen die gar nicht in `tkinter` definiert werden, sondern ihrerseits von woanders importiert werden. Das macht Programme unnötig unübersichtlicher und fehleranfälliger und es besteht die Gefahr von Namenskollisionen.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
Namen sollten keine kryptischen Abkürzungen enthalten oder gar nur daraus bestehen. Der Name soll dem Leser vermitteln was der Wert dahinter im Programm bedeutet, nicht zum rätseln zwingen.
Man nummeriert keine Namen. Dann will man sich entweder bessere Namen überlegen, oder gar keine Einzelnamen/-werte verwenden, sondern eine Datenstruktur. Oft eine Liste.
Man muss aber auch gar nicht jedes Zwischenergebnis an einen Namen binden und auch keine Werte die danach gar nicht mehr gebraucht werden.
`random` wird importiert, aber nirgends verwendet.
Hier ein 10×10 cm grosser Canvas mit einem maximal 4 cm breiten Label an Position (3, 3) in cm:
Code: Alles auswählen
#!/usr/bin/env python3
import tkinter as tk
def main():
fenster = tk.Tk()
fenster.title("Test © 2024")
canvas = tk.Canvas(fenster, width="10c", height="10c", bg="#F0FFFF")
canvas.grid()
tk.Label(
canvas,
bg="#87CEFA",
text="Dieser Text ist für das Label leider viel zu lang.",
wraplength="4c",
).place(x="3c", y="3c")
fenster.mainloop()
if __name__ == "__main__":
main()