Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.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填充字符串以对齐Tkinter ListBox小部件中的列_Python_Tkinter_Listbox_String Formatting - Fatal编程技术网

Python填充字符串以对齐Tkinter ListBox小部件中的列

Python填充字符串以对齐Tkinter ListBox小部件中的列,python,tkinter,listbox,string-formatting,Python,Tkinter,Listbox,String Formatting,好的,基本问题是: 我有一组我想要显示的字符串,后面是垂直对齐的相关数据,这组字符串的长度是可变的。使用此处描述的方法:产生的结果不理想。看看我努力的成果。我推测,在列表框中,字符的宽度不是像打印命令一样固定的,这可以解释为什么我的列表框列没有对齐 这是我目前正在使用的代码,与另一个问题上显示的解决方案相比,它是粗糙的,但它的功能是正确的,因为它用足够的空间填充数据,使每个数据具有相同的长度 stringlist=['thistext','thattext','somemoretext','tx

好的,基本问题是: 我有一组我想要显示的字符串,后面是垂直对齐的相关数据,这组字符串的长度是可变的。使用此处描述的方法:产生的结果不理想。看看我努力的成果。我推测,在列表框中,字符的宽度不是像打印命令一样固定的,这可以解释为什么我的列表框列没有对齐

这是我目前正在使用的代码,与另一个问题上显示的解决方案相比,它是粗糙的,但它的功能是正确的,因为它用足够的空间填充数据,使每个数据具有相同的长度

stringlist=['thistext','thattext','somemoretext','txt','text with spaces']

tagnmlen=0
for tags in stringlist:
    if len(tags) > tagnmlen:
        tagnmlen=len(tags)

for text in stringlist:
    strg = text.ljust(tagnmlen) + ',' + "another bit of data"
    listbox.insert(END,strg)

我不希望将列表框的字体更改为具有一致间距的字体,也不希望将多个列表框相邻设置。

如果要在单个列表框中对齐两列字符串,我建议如下:

  • 使用tkFont测量左字符串的长度(使用的确切字体),如前所述

  • 在左字符串和右字符串之间添加空格,以便右字符串始终从同一位置开始(实际上,此位置会变化几个像素,因为即使“空格”字符也只有几个像素宽)

  • 最后你会得到这样的结果:

    代码(Python 2.x)

    对于Python 3.x,将导入语句替换为:

    import tkinter as Tk
    from tkinter import font as tkFont
    

    工作很有魅力,谢谢!
    import tkinter as Tk
    from tkinter import font as tkFont