Text in Label gleich ausrichten

Fragen zu Tkinter.
Antworten
Benutzeravatar
MrCrowncoin
User
Beiträge: 1
Registriert: Freitag 29. Mai 2026, 08:41

Hallo zusammen,

ich bastle ("basteln" trifft es gut, da es mein erster Kontakt mit Python ist und ich mich an Videos und Anleitungen entlanghangle) an einem GUI für meine Musiksammlung.
Hierfür lese ich mit panda (read.excel) aus einer .xlsx Datei die gewünschten Daten aus und übergebe sie an ein ttk Label.
Das funktioniert inzwischen auch gut, aber die Darstellung gefällt mir nicht.

Zur Veranschaulichung:
Bild

Rechts oben im Label "Musik_gesamt_Ausgabe" kann ich die Formate ausrichten, dafür ist die Anzahl versetzt oder umgedreht.
Unten im Label "Album_label" passt der header im großen und ganzen. Die Spalte "Band" ist noch ausgerichtet aber danach wird es vogelwild.

Kann ich dieses Chaos irgendwie ordnen oder wäre es besser jede Zeile in ein eigenes Label zu überführen?


Ich versuche inzwischen vermutlich länger, dieses Chaos zu ordnen, als der Aufbau des restlichen GUI gedauert hat.

Code: Alles auswählen

....
d = pd.read_excel('Tonträger-Liste.xlsx',sheet_name='Tabelle1',header=0,names=['Band','Titel','Erscheinungsjahr','Format','Herkunft','Limitierug','Bemerkung','Band-korrigiert'])
d_format = d['Format'].value_counts(normalize=False, sort=True)
....
Musik_gesamt_Ausgabe = ttk.Label(root, text=str(d_format.to_string(header=True)), justify="left", font=("Arial", 15),borderwidth=2, relief="solid")
Musik_gesamt_Ausgabe.grid(row=1, column=2, padx=(20, 10), pady=(2, 2), columnspan=3, sticky="e")
....
Album_Input = tk.StringVar(root, value=FoundBand.to_string(header=True,index=False,justify="left", na_rep="---",col_space=15))
Album_label= ttk.Label(root, text=str(Album_Input.get()), justify='left', font=("Arial", 15),borderwidth=2, relief="solid")
Album_label.grid(row=5, column=0, padx=(20, 10), pady=(2, 2), columnspan=3, sticky="ew")
....

Schon mal vorab vielen Dank für die Hilfe.
kiaralle
User
Beiträge: 196
Registriert: Donnerstag 19. August 2021, 19:11

Schau mal hier rein. War auch mein Problem :-)

viewtopic.php?t=59039
Benutzeravatar
snafu
User
Beiträge: 6973
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@MrCrowncoin
Deine Daten sind vermutlich mit Tabulatoren (\t) getrennt. Hierdurch kommt aus aufgrund der unterschiedlichen Textlängen zu den verschobenen Spalten. Man sollte also im ersten Schritt zeilenweise alle durch Tabs getrennten Werte per ``.split()`` trennen, dann spaltenweise die Maximalbreiten bestimmen und diese Breiten dann per String Formatting auf die einzelnen Zeilen anwenden.

Wenn du die Ursprungsdaten hier reinstellst, kann ich / wir dir gerne eine Funktion dafür schreiben.
Sirius3
User
Beiträge: 18411
Registriert: Sonntag 21. Oktober 2012, 17:20

@snafu: dass man mit Leerzeichen Text rechtsbündig ausrichten kann, geht nur bei Schriftarten mit fester Zeichenbreite. Hier ist die Lösung das Grid-Layout von Tk zu benutzen.

Code: Alles auswählen

import tkinter as tk

CONTENT = [
    ("Format", ""),
    ("CD", "530"),
    ("Digi-CD", "314"),
    ("LP", "211"),
    ("EP", "43"),
    ("MC", "23"),
    ("CD-R", "3"),
]

def main():
    window = tk.Tk()
    totals = tk.Frame(window)
    for index, row in enumerate(CONTENT):
        tk.Label(totals, text=row[0], anchor=tk.W).grid(row=index, column=1, sticky=tk.EW)
        tk.Label(totals, text=row[1], anchor=tk.E).grid(row=index, column=2, sticky=tk.EW)
    totals.pack()
    window.mainloop()

if __name__ == "__main__":
    main()
Antworten