Platzierung in einem Textwidget

Fragen zu Tkinter.
Antworten
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Dienstag 15. April 2008, 12:06

Hi Leute,

ich bins mal wieder.
Ich bin in meinem Programm nun weitergekommen und stehe nun wieder wie vor einer Wand.

Mein Problem:

Ich lese eine Adresse in ein Texfenster ein.
(Das klappt jetz auch).

Nun möchte ich nun gewisse Bankdaten platzieren.
Diese Daten sollen (wenn es geht) immer an derselben Stelle stehen.
Sie sollen auf Höhe der Adresse anfangen allerdings rechtsbündig.
Desweiteren sollen sie unabhängig sein von den Zeichen der Adresse.

Bevor ich meinen Code poste hier mal wie es aussehen sollte:


linksbündig Adresse -> rechtsbündig Kontodaten

ich bekomme es nicht an den rechten Rand und leider auch nicht richtig untereinander.Ich benutzer immer die Insert-Methode des Textwidgets:

Code:

Code: Alles auswählen


k=-1
         
         tab="  " # 2 Spaces
         bankliste=["bla","bla2","bla3"] #usw ist schon definiert
         final=["x","y","z"] #wurde vorher schon richtig definiert
         
         for k in range(length):
           
           if k<(length-1):
               textfenster.insert(str(k+6)+".5",""+tab+str(final[k]))#klappt
               #textfenster.insert(str(k+6)+".8",str(bankliste[k])) #mist!
               
               textfenster.insert(END,"\n")

           if k==(length-1): #letzte Element
              textfenster.insert(END,"\n")
              
              textfenster.insert(str(k+6)+".5",""+tab+str(final[k]))
           



der mit '#' auskommentierte Befehl liefert nicht das gewünschte Ergebnis
ich habe einfach mal als Spaltenlenindex .8 genommen.
Aber irgendwie ist es egal was ich hier eintrage, es kommt nie das gewünschte Layout.

Ich habe schon alles zum Thema 'Text-Widget' gelesen, auch hier in der Suche aber ich komme hier auf keinen grünen Zweig.

Irgendwelche Ideen?
Es wäre gut wenn man eben die Kontodaten fest an eine bestimmte Stelle
verankern könnte.

Gruß
Timo
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Dienstag 15. April 2008, 14:29

Wenn ich es richtig verstehe, geht es dir darum, in EINER Zeile die erste Adresszeile (Name oder Titel o.ä.) links stehen zu haben und rechts daneben eine Kontonummer.

Dann wäre eine Möglichkeit die, diese Gesamtzeile vor der Ausgabe in das Textfeld als Zeichenkette zusammenzubauen und als Komplettzeile linksbündig auszugeben. Also ungefähr so:

name+n_leerzeichen+kontonummer

Da die Breite des Textfeldes ja bekannt sein sollte, kannst du die benötigte Anzahl von Leerzeichen ermitteln, so dass die Kontonummer optisch rechtsbündig erscheint.
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Dienstag 15. April 2008, 17:11

Hi,
danke für deine schnelle Antwort.
Aber wenn ich es so mache richtet sich der 'Grad der Rechtsbündigkeit'
wieder nach der Zeichenanzahl des Adressstrings.

Gibt es denn da keine 'Patentlösung' ?
Ich habe echt kein Plan wie ich das sauber implementieren kann.

Ich habe gedacht ich ermittel erst mit len(final[k]) die Länge und nehm
mir irgendeinen maximal Wert und alles was drunter ist wird mit spaces aufgefüllt.

Aber da ergeben sich (ausser das es wohl ein wenig umständlich gedacht ist)
für mich noch weitere Probleme.


Wie füge ich ohne eine weitere Schleife zu benutzen die Differenz
von meinem ermittelten Wert und dem Maximalwert als spaces ein?


Sagen wir wir haben folgendes:

Firma -> len sagt 5
Muster -> len sagt 6
Architektbüro -> len sagt 13
12345 Hodrio -> len sagt 12

wenn nun der Maximalwert 50 ist, müsste ich jeweils (45/44/37/38)
Leerzeichen pro Zeile vor den Eintrag der jeweiligen Bankzeile hängen
um alle sauber untereinander auf Postition 50 zu haben.

Kann mir jemand sagen wie ich meinen oberen Code modifizieren müsste,
um dies zu bewerkstelligen. Ich steh grad echt vor ner Wand.


Gruß und danke für die bisherigen und kommenden ;) Antworten
Timo
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Dienstag 15. April 2008, 17:22

Was ich meinte, war folgendes:

Code: Alles auswählen

>>> feldbreite = 50
>>> adresse = "Max Mustermann"
>>> konto = "323 234 34"
>>> leer = (feldbreite-len(adresse)-len(konto))*" "
>>> zeile = adresse+leer+konto
>>> print zeile
Max Mustermann                          323 234 34
timo_81
User
Beiträge: 23
Registriert: Dienstag 11. März 2008, 18:08

Dienstag 15. April 2008, 18:10

Hi,
danke das hat sehr geholfen!!

Gruß
Timo
BlackJack

Dienstag 15. April 2008, 18:50

Vielleicht lohnt sich auch ein Blick auf Zeichenkettenformatierung mittels ``%``-Operator.

Code: Alles auswählen

In [96]: '|%10s|' % 'hallo'
Out[96]: '|     hallo|'

In [97]: '|%-10s|' % 'hallo'
Out[97]: '|hallo     |'
Antworten