rechtsbündige Spalten in der Listbox

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DB7WN
User
Beiträge: 49
Registriert: Samstag 18. März 2017, 22:11

Hallo allerseits!
Ich möchte Daten aus einer MySQL-Tabelle lesen und in schönen Spalten rechtsbündig in einer Tkinter Listbox darstellen. Es gelingt mir nicht die Spalten rechtsbündig anzulegen. So versuche ich das:
abfrage = cursor.fetchall()
for zeile in abfrage:
anz.insert('end', str(zeile[0]) + str(zeile[1]).rjust(7) + str(zeile[2]).rjust(8) + str(zeile[3]).rjust(8) + str(zeile[4]).rjust(8)+ str(zeile[5]).rjust(8) + str(zeile[6]).rjust(8) + '\n')
Die Spalten sehen allerdings so aus, als seien sie zentriert und nicht rechtsbündig. Die Positionierung der Spalten bezieht sich anscheinend auf die Position der Spalte davor, so dass bei unterschiedlich breiten Spalteninhalten, das Ganze sehr "wackelig" aussieht. Vermutlich verwende ich "rjust()" nicht richtig, oder funktioniert das gar nicht in Tkinter? Ich finde keine gute Erklärung dazu. Oder kann man das irgendwie anders bewerkstelligen?
Ein screenshot wäre jetzt hilfreich, aber krieg ich nicht hin.

Gruß - Uli
Benutzeravatar
__blackjack__
User
Beiträge: 13236
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@DB7WN: Da so ein Eintrag einfach nur eine Zeichenkette ist, hängt das von der Schriftart ab. `rjust()` fügt ja nur Leerzeichen ein. Du hast da das gleiche Problem welches Du auch an anderen Stellen (Textverarbeitung, Webseiten/Foren, …) hast wenn Du mit Leerzeichen ausgerichteten Text versuchst mit einer proportionalen Schriftart zu realisieren – die verschiedenen Zeichen sind unterschiedlich breit und damit kann man ausrichten mit Leerzeichen nicht machen.

Du könntest eine nicht-proportionale Schriftart für die Listbox verwenden, oder Du müsstest Dir eine andere Möglichkeit der Darstellung überlegen. Beispielsweise ein Grid-Layout wo in der ersten Spalte ein Radiobutton zur Auswahl einer Zeile ist.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
DB7WN
User
Beiträge: 49
Registriert: Samstag 18. März 2017, 22:11

guter Tip! Danke!
Mit Courier funktionierts.
Antworten