我想要做的是分开文本块,这样我在每一行中都有两个块,并且在不同的行中它们从同一点开始。我正在使用它的是我正在为自己的用法开发的一个小书管理器程序,所以看起来应该是这样的:
Book Title Here Author Name Here
Little longer title here Author Name Here
shorter here Author Name Here
我尝试使用.ljust()
或.rjust()
使用空格,但它并没有真正为我效果:无论出于什么原因,空间都不会出来,我最终没有标题堆叠在一起,但相隔很少。
我正在使用Tkinter构建GUI,每行应该是列表框中的项目。
答案 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}'
小于(<
)表示左对齐,而大于(>
)表示正确对齐。
rjust
和ljust
如果你真的想使用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)