我正在尝试格式化字符串以显示高分表的两列。使用print
时,Python可以很好地完成这项工作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
由于该列表中的第一个名称比其余名称长(宽度,不是字符数),因此该选项卡会强制该分数超出位置。有没有办法做到这一点,不仅要考虑字符串的长度,还要考虑字符串的宽度?
答案 0 :(得分:2)
这样的事可以接受吗?
>>> 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
这里“name”字段用空格填充,最大宽度为30个字符。
编辑:我现在看到字体的宽度也是一个问题。我一开始没有意识到你的问题。我会留下这件事以防万一未来的Google员工出于不同的原因而来到这里。
答案 1 :(得分:0)
您有两种选择:
将PyGTK标签的字体更改为具有相等宽度字符的字体(在游戏中不合理,它会让我们想起旧的街机时代)。您可以使用pango.Layout
的{{3}}。
使用彼此相邻的两个标签,并使用类pango.Layout
的方法set_markup
。第一个标签将名称对齐到左侧,第二个标签包含分数,它与右侧对齐。只要它们的空间足够,名称和分数就会分别与左右对齐。