同样在Python中分隔单词

时间:2014-05-23 21:52:00

标签: python string list listbox format

我想要做的是分开文本块,这样我在每一行中都有两个块,并且在不同的行中它们从同一点开始。我正在使用它的是我正在为自己的用法开发的一个小书管理器程序,所以看起来应该是这样的:

Book Title Here                    Author Name Here
Little longer title here           Author Name Here
shorter here                       Author Name Here

我尝试使用.ljust().rjust()使用空格,但它并没有真正为我效果:无论出于什么原因,空间都不会出来,我最终没有标题堆叠在一起,但相隔很少。

我正在使用Tkinter构建GUI,每行应该是列表框中的项目。

2 个答案:

答案 0 :(得分:4)

我建议使用format mini-language,这是设置:

bookdict = {
  'Little longer title here': 'Author Name Here',
  'Book Title Here': 'Another Author Name Here',
  'shorter here': 'Diff Name Here'}
bookwidth = max(map(len, bookdict.keys()))
authorwidth = max(map(len, bookdict.values()))

format迷你语言

这种迷你语言的用法:

template = '{{0:<{bw}}} {{1:>{aw}}}'.format(bw=bookwidth, aw=authorwidth)
for book, author in bookdict.items():
    print( template.format(book, author) )

打印:

Little longer title here         Author Name Here
Book Title Here          Another Author Name Here
shorter here                       Diff Name Here

为了打破这种情况,加倍的括号将保留在第一种格式上并缩小为单括号,单括号将成为计算的最大镜头的宽度,例如:

'{0:<30} {1:>20}'

小于(<)表示左对齐,而大于(>)表示正确对齐。

rjustljust

如果你真的想使用str.rjust和str.ljust方法:

for book, author in bookdict.items():
    print(book.ljust(bookwidth) + ' ' + author.rjust(authorwidth))

打印:

Little longer title here         Author Name Here
shorter here                       Diff Name Here
Book Title Here          Another Author Name Here

答案 1 :(得分:0)

如果您使用的是固定宽度字体,那么"{:40}{}".format("Book Title Here", "Author Name Here"就是您的朋友。 (将40更改为要为第一部分分配的多个空格。)

如果你使用的是可变宽度字体,那么你会想要使用Tkinter的排列方式来做到这一点,这可能归结为将每行的两个部分放在各自的部分中。

例如,您可以采取以下措施:

Label(master, text="Book Title Here").grid(row=0, sticky=W)
Label(master, text="Author Name Here").grid(row=0, column=1, sticky=W)

Label(master, text="Little longer title here").grid(row=1, sticky=W)
Label(master, text="Author Name Here").grid(row=1, column=1, sticky=W)