2

我正在尝试格式化字符串以显示高分表的两列。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. 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

因为该列表中的第一个名字比其他名字长(在宽度上,不是字符数),所以选项卡会强制分数不在位置上。有没有办法做到这一点,不仅要考虑字符串的长度,还要考虑字符串的宽度?

4

2 回答 2

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

这里的“名称”字段用空格填充,最大宽度为 30 个字符。

编辑:我现在看到字体的宽度也是一个问题。起初我没有从你的问题中意识到这一点。我会留下这个,以防未来的 Google 员工因为不同的原因来到这里。

于 2012-06-28T20:07:39.157 回答
0

你有两个选择:

  1. 将 PyGTK 标签的字体更改为具有等宽字符的字体(在游戏中并非不合理,它让我们想起了过去的街机时代)。你可以用set_markupof做到这一点pango.Layout

  2. 使用相邻的两个标签并使用set_alignment类的方法pango.Layout。第一个标签将名称对齐到左侧,第二个标签包含分数并且对齐到右侧。只要它们有足够的空间,名称和分数就会分别很好地左右对齐。

于 2012-06-28T19:58:57.890 回答