wx.ListBox中的字符串格式

时间:2014-04-30 06:18:03

标签: python linux listbox string-formatting

我是Python的新手,我希望在wx.ListBox中显示具有特定格式的字符串。

例如:正确对齐,但显示如下。

enter image description here

CODE:

fileName = fileName + str(" " * (38 - len(fileName)))
self.displayList.append( "   %02d             %s  %0.2fKB" % (index+1, fileName, fileSize ))

当我打印self.displayList时,显示正确对齐。

enter image description here

让我知道我错在哪里,或者应该用其他方式显示正确对齐的字符串。

修改

首先感谢您的回复。

通过应用你的(Sundar Nataraj)解决方案,输出与你提到的相同,但它在控制台上,而在wx.ListBox中,再次没有正确格式化。

见下图。

enter image description here

我只是将displayList作为参数传递。

self.autoNcListbox = wx.ListBox(self.autoProgListPanel, wx.ID_ANY, wx.Point( 0, 25), wx.Size( 512, 510 ), self.displayList, wx.RAISED_BORDER)

1 个答案:

答案 0 :(得分:1)

试试这个,

index=[1,2,3,4]
text=['animal','gv','asdfasdfasd','adfasdfasdf']
size=['1kb','2kb','3kb','4kb']
displaylist=[]

for i in zip(index,text,size):
    s=""
    for j in range(0,3):
        s +='{0:{fill}{align}16}'.format(i[j], fill=' ', align='<')

    print s
    displaylist.append(s)

for i in displaylist:
    print i

输出

1                animal           1kb             
2                gv               2kb             
3                asdfasdfasd      3kb             
4                adfasdfasdf      4kb  

编辑:

import wx
import sys
from wx.lib.mixins.listctrl import ListCtrlAutoWidthMixin


index=[1,2,3,4]
text=['animal','gv','asdfasdfasd','adfasdfasdf']
size=['1kb','2kb','3kb','4kb']
displaylist=[]
for i,j,l in zip(index,text,size):
    displaylist.append((i,j,l))




class AutoWidthListCtrl(wx.ListCtrl, ListCtrlAutoWidthMixin):
    def __init__(self, parent):
        wx.ListCtrl.__init__(self, parent, -1, style=wx.LC_REPORT)
        ListCtrlAutoWidthMixin.__init__(self)


class Actresses(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(380, 230))

        hbox = wx.BoxSizer(wx.HORIZONTAL)

        panel = wx.Panel(self, -1)

        self.list = AutoWidthListCtrl(panel)
        self.list.InsertColumn(0, 'index', width=140)
        self.list.InsertColumn(1, 'text', width=130)
        self.list.InsertColumn(2, 'filesize', wx.LIST_FORMAT_RIGHT, 90)

        for i in displaylist:
            index = self.list.InsertStringItem(sys.maxint, str(i[0]))
            self.list.SetStringItem(index, 1, i[1])
            self.list.SetStringItem(index, 2, i[2])

        hbox.Add(self.list, 1, wx.EXPAND)
        panel.SetSizer(hbox)

        self.Centre()
        self.Show(True)

app = wx.App()
Actresses(None, -1, 'file')
app.MainLoop()