Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用python将字符串格式化为列_Python_String_Label_Pygtk_Pango - Fatal编程技术网

尝试使用python将字符串格式化为列

尝试使用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

我正在尝试格式化一个字符串,以显示高分表的两列。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
由于该列表中的第一个名称比其他名称长(宽度,而不是字符数),因此选项卡会强制分数偏离位置。有没有一种方法不仅要考虑字符串的长度,还要考虑字符串的宽度?

您有两种选择:

  • 将PyGTK标签的字体更改为具有相同宽度字符的字体(在游戏中这不是不合理的,它让我们想起了旧的街机时代)。您可以使用
    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文档来看,我不确定这是否可行。我认为等宽字符是一种方法。我现在有些东西在工作,看起来好多了。这个高分表甚至适用于旧的街机游戏!所以它工作得很好。对于可能正在搜索的任何人,下面是一个设置字体的非常简单的示例: