在用python的tkinter库做一个小工具时,遇到了字符串格式化和对齐的问题,记录一下
我是要让tkinter的ListBox里每一行数据纵向对齐,效果如下:
每一行是三个数据组合而成,每个数据长度不定。
要想实现这个效果,需要用到string.format的填充对齐,另外还需要使用等宽字体。
因为string.format的填充对齐是按字符个数来的,它只能做到填充之后字符数量符合指定的个数,如果每个字符的宽度不一样就对不齐。
string.format的填充对齐格式如下
{值索引 : 填充字符 对齐方式 填充后长度}
<为左对齐,^为居中对齐,>为右对齐
例如"{0:'*'<10}",表示第0个值是左对齐的,需要用*号填充右边直到达到10个字符。
(顺便提一下全角空格是chr(12288),也就是中文标点里的空格。)
好了,然后设置下tk相应控件的字体,例如:
li = tk.Listbox(top_level,bg="green",xscrollcommand=xscroll.set,yscrollcommand=yscroll.set,font=("TkFixedFont",10))
注意里面设置的font,TkFixedFont是tk封装的跨平台等宽字体名字。