2

ハイスコ​​ア テーブルの 2 つの列を表示するように文字列をフォーマットしようとしています。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 ラベルに入る 1 つの文字列です。現在、私はこれを持っています:

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

次の 2 つのオプションがあります。

  1. PyGTK ラベルのフォントを等幅文字のフォントに変更します (ゲームでは無理ではありません。昔のアーケード時代を思い出させます)。set_markupでこれを行うことができますpango.Layout

  2. 2 つのラベルを並べて使用しset_alignment、クラスのメソッドを使用しpango.Layoutます。最初のラベルは名前を左に揃え、2 番目のラベルにはスコアを含み、右に揃えます。十分なスペースがある限り、名前とスコアはそれぞれ左右にうまく配置されます。

于 2012-06-28T19:58:57.890 に答える