python - TkInter ListBox 和 .format 的使用

标签 python string tkinter string.format

我正在使用这个命令:

self.licenseBox.insert(END, "{:30}{:90}{:20}{:5}".format(item[0],
                                                    item[1], item[2], item[3]))

但是 .format 会先添加项目,然后再添加列宽。例如,if item[0] = "foo",第一列的宽度为 33,表示后面的参数相差三。

有什么解决办法吗?

最佳答案

But .format will add the item then the column width.

format() 不做这样的事情:

print "1234567890" * 2
print "{:4}{:4}{:4}{:4}".format('aaaa', 'bbbb', 'cccc', 'dddd')

--output:--
12345678901234567890
aaaabbbbccccdddd

输出的总宽度为 16 = 4 x 4。

您应该明确指定对齐方式:

lb.insert(tk.END, "{:<5}-{:<2}".format(123, 9))

文档说:

'<'   Forces the field to be left-aligned within the available space 
      (this is the default for most objects).

我认为您可能会与“大多数对象”语言发生冲突。字符串、数字等有一个 __format__() 方法,当您调用它们的 format() 方法时要求它们显示它们自己时调用该方法。检查一下:

print "{:4}".format("a")
print "{:4}".format(9)

--output:--
a   
   9

字符串和数字有不同的默认值。所以我不会依赖默认值——而是显式的,然后你就会知道输出是如何合理的。

话虽如此,我必须使用 17 作为最小字段宽度才能实际得到 10:

import Tkinter as tk

root = tk.Tk()
root.geometry("1000x200")

lb = tk.Listbox(root, width=150)
lb.insert("1", "{:4}{:4}".format("a", "b") )
lb.insert(tk.END, "1234567890" * 4)
lb.insert(tk.END, "{:<17}{:<10}".format(100, 200) )
lb.pack()

root.mainloop()

使用该代码,我看到 200 从第 11 列开始。好的,对齐问题与 tkinter 使用非固定宽度的默认字体有关,即所有字符不占用相同的空间量。如果您尝试对齐列,则需要使用固定宽度的字体。尝试这样的事情:

import Tkinter as tk
import tkFont

root = tk.Tk()

my_font = tkFont.Font(family="Monaco", size=12)  #Must come after the previous line.

root.geometry("1000x200")

lb = tk.Listbox(root, width=150, font=my_font)
lb.insert("1", "{:4}{:4}".format("a", "b") )
lb.insert(tk.END, "1234567890" * 4)
lb.insert(tk.END, "{:>10}{:>10}".format(100, 200) )
lb.pack()

root.mainloop()

关于python - TkInter ListBox 和 .format 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17310034/

相关文章:

list - 检查列表中是否有多个元素的 Pythonic 方法

python - 在长时间运行的进程中重新加载全局Python变量

java - 如何测试 String 是否为 URL 格式?

string - 使用 Swift 删除一组特定字符之间的所有内容

tkinter - 使用网格几何和屏幕大小根据窗口大小调整小部件大小

python - Tkinter 错误 : _tkinter. TclError:未知选项 "-menu"

python - 如何在不重复的情况下生成 5 个字符的字符串组合(2 个不同的数字、两个相等的字母和 1 个字母)

Python类定义--导入语句

ios - 如何将文本字符串转换为十六进制字符串?

python - 按实体值对 tkinter 列表框中的项目进行排序