Python中如何用format()将可变长字符串格式化为对齐的两列
Python可变长度字符串格式化对齐解决方案
问题根源
你的代码存在两处明显错误:
- 格式化占位符语法错误:
{:1<50}的写法错误,你将填充字符/索引放到了对齐符<的前方,该写法实际含义是「使用字符'1'作为填充符,对默认索引的参数做左对齐、占50字符宽度」,不符合你的需求。 - 参数索引越界:第二个占位符写为
{2:>58}使用索引2,但你format()方法仅传入了2个参数,对应索引为0和1,不存在索引为2的参数。
修正方案
第一步:修改格式化语法
正确的格式化字符串语法为{参数索引:对齐方式 宽度},第一列左对齐占50字符、第二列右对齐占58字符的正确写法如下:
cur.execute("SELECT * FROM test") for items in cur: list_box.insert(1, "{0:<50}{1:>58}".format( items[0], str(items[1])))
第二步:检查控件字体
如果修改语法后第二列仍无法对齐,是因为列表控件使用了非等宽字体,不同字符的实际显示宽度不同,固定字符数的格式化规则无法生效。你只需要将列表控件的字体修改为等宽字体(如Consolas、Monaco、Noto Mono等)即可完全解决对齐问题。
内容的提问来源于stack exchange,提问作者NicLovin
相关产品推荐
相关产品推荐

