尝试使用python将字符串格式化为列
我正在尝试格式化一个字符串,以显示高分表的两列。Python在使用print时能够很好地做到这一点尝试使用python将字符串格式化为列,python,string,label,pygtk,pango,Python,String,Label,Pygtk,Pango,我正在尝试格式化一个字符串,以显示高分表的两列。Python在使用print时能够很好地做到这一点 print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x) 但当尝试使用格式化字符串时,却变得更具挑战性。这就是我想要得到的结果: #for name, score in list: prints the following 1. FirstName LastName 45000 2. First LastName 78000 3. Fs
print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)
但当尝试使用格式化字符串时,却变得更具挑战性。这就是我想要得到的结果:
#for name, score in list: prints the following
1. FirstName LastName 45000
2. First LastName 78000
3. Fst Lst 11123
4. Name Name 40404
5. llll lll 12345
这是进入pygtk标签的所有一个字符串。目前我有:
score_string += "%i. %-15.12s\t%15s\n" % (index, name, score)
这会产生不可信的结果。我的当前测试数据显示如下:
1. Firstname Lastname 49900
2. First Last 93000
3. Name Name 6400
由于该列表中的第一个名称比其他名称长(宽度,而不是字符数),因此选项卡会强制分数偏离位置。有没有一种方法不仅要考虑字符串的长度,还要考虑字符串的宽度?您有两种选择:
pango.Layout的
pango.Layout
的方法。第一个标签将名称向左对齐,第二个标签包含分数并向右对齐。只要他们有足够的空间,名字和分数将很好地分别排列在左边和右边这样的事情可以接受吗
>>> names = ["Firstname Lastname", "First Last", "Name Name"]
>>> scores = [49900, 93000, 6400]
>>> for i,v in enumerate(zip(names, scores)):
... name, score = v[0], v[1]
... print "% *d. % -*s %d" % (3, i, 30, name, score)
...
0. Firstname Lastname 49900
1. First Last 93000
2. Name Name 6400
此处“名称”字段用空格填充,最大宽度为30个字符
编辑:我现在看到字体的宽度也是一个问题。起初我从你的问题中没有意识到这一点。我将把这个保留下来,以防未来的谷歌用户出于不同的原因来到这里。你能用一个恒定的字符来填充姓名和分数之间的空格,使行的长度相等吗?例如:1。为什么不使用表格小部件?HTML标记可能是另一种可能性。是的,字体宽度给我带来了问题。我正在尝试将字体系列改为courier,但从pygtk文档来看,我不确定这是否可行。我认为等宽字符是一种方法。我现在有些东西在工作,看起来好多了。这个高分表甚至适用于旧的街机游戏!所以它工作得很好。对于可能正在搜索的任何人,下面是一个设置字体的非常简单的示例: