Seite 1 von 1
Variabel formatieren
Verfasst: Mittwoch 23. September 2015, 06:55
von Alfons Mittelmeyer
Ich habe diesen Ausdruck gefunden: '{:<30}'.format('left aligned')
Ich bräuchte das aber so:
def width_print(wid,par):
print('{:<wid}'.format(par))
Irgendwo geht doch sicher auch eine variable Breite, ohne das so zu machen:
Re: Variabel formatieren
Verfasst: Mittwoch 23. September 2015, 07:11
von Sirius3
@Alfons Mittelmeyer: hast Du schon in die
Dokumentation geschaut?
Re: Variabel formatieren
Verfasst: Mittwoch 23. September 2015, 07:16
von Alfons Mittelmeyer
@Sirius3 Habe ich schon geschaut. Schaut aber so kompliziert aus. Vielleicht mache ich es dann so:
Ob das aber den Style guides entspricht?
Re: Variabel formatieren
Verfasst: Mittwoch 23. September 2015, 07:19
von Sirius3
Dann hast Du nicht gründlich genug gelesen:
Code: Alles auswählen
def width_print(wid,par):
print('{par:<{wid}}'.format(par=par, wid=wid))
Re: Variabel formatieren
Verfasst: Mittwoch 23. September 2015, 07:25
von Alfons Mittelmeyer
@Sirius3 Hat aber nicht funktioniert:
Code: Alles auswählen
print('{par:<{wid}}'.format(par="Das ist ein Test", wid=5))
Hat es nicht abgeschnitten.
Und wenn man es dann so macht, das schaut noch komplizierter aus als mein Ausdruck:
Code: Alles auswählen
print(('{par:<{wid}}'.format(par="Das ist ein Test", wid=5))[0:5])
Noch eine Frage. Ist das ein Problem, wenn etwas so aussieht, natürlich die -1 nicht hart kodiert:
Re: Variabel formatieren
Verfasst: Mittwoch 23. September 2015, 07:51
von Alfons Mittelmeyer
Das ist eigentlich, was ich bräuchte:
Code: Alles auswählen
par_width = myWidget['width'] - 1 - info_len
line = (par + " "*(par_width - len(par)))[0:par_width] + "|" + info
Wenn es dafür einen schönen Format Ausdruck gäbe. Aber damit kenne ich mich nicht so gut aus.
Re: Variabel formatieren
Verfasst: Mittwoch 23. September 2015, 08:56
von cofi
width is a decimal integer defining the minimum field width.
Die Modifier kuemmern sich um das Padding, das sind keine absoluten Feldbegrenzer. Da musst du dann selbst abschneiden.
Re: Variabel formatieren
Verfasst: Mittwoch 23. September 2015, 09:34
von Alfons Mittelmeyer
Dann lohnt sich dieser Formatstring hier gar nicht. Hab ich es eben so gemacht:
Code: Alles auswählen
import tkinter as tk
root = tk.Tk()
DIR_TYPE = 0
DEVICE_ROOT = (("Documents",DIR_TYPE),("Music",DIR_TYPE),("Pictures",DIR_TYPE),("Videos",DIR_TYPE))
list_box = tk.Listbox(root,font='TkFixedFont',selectmode='extended')
list_box.pack(side='right')
def fill_line(widget,par,info,info_len):
par_width = widget['width'] - 1 - info_len
return (par + " "*(par_width - len(par)))[0:par_width] + "|" + info
def fill_dir(dir_list=DEVICE_ROOT,lb=list_box,first="/"):
lb.delete(0,'end')
lb.insert('end',fill_line(lb,first,first,3))
for entry in dir_list:
lb.insert('end',fill_line(lb,entry[0],'DIR' if entry[1] == DIR_TYPE else '',3))
fill_dir()
root.mainloop()
Re: Variabel formatieren
Verfasst: Mittwoch 23. September 2015, 09:54
von BlackJack
Wieso lohnt sich der Formatstring nicht? Es ist damit kürzer und einfacher. Leichter zu verstehen IMHO auch. Ansonsten sollte man `ljust()` verwenden statt sich das selber nachzubasteln:
Code: Alles auswählen
In [15]: '{0:<{1}}|{2}'.format(par[:par_width], par_width, info)
Out[15]: 'parr|dead'
In [16]: '{0}|{1}'.format(par[:par_width].ljust(par_width), info)
Out[16]: 'parr|dead'
In [17]: par, par_width, info
Out[17]: ('parrot', 4, 'dead')
Re: Variabel formatieren
Verfasst: Mittwoch 23. September 2015, 10:29
von Alfons Mittelmeyer
@BlackJack Das mit ljust ist gut und auch am Kürzesten, wenn man das format einfach weglässt:
Re: Variabel formatieren
Verfasst: Mittwoch 23. September 2015, 17:35
von Sirius3
@Alfons Mittelmeyer: Du bist ein hoffnungsloser Fall. Aber hier ist das, was Du wolltest: