ms中的wxpython listbox换行符

时间:2012-10-29 16:59:29

标签: python windows wxpython wxwidgets

我想使用

将多行消息添加到列表框中
wx.listbox.Append('part1 \r\n part2')

在linux(gtk)上获取多行方框

在Windows(msw)上它只是忽略换行符......

有没有办法在Windows中获得类似的功能?

2 个答案:

答案 0 :(得分:2)

Windows ListBox control未实现该行为。虽然它允许自己绘制项目并调整其高度,但wxWidgets不会为ListBox公开此功能。 作为替代方案,您可以使用wx.SimpleHtmlListBox或从wx.HtmlListBox派生。

  

wxSimpleHtmlListBox 是wxHtmlListBox的一个实现,它在列表框行中显示HTML内容。

     

与wxHtmlListBox不同,它不是一个抽象类,因此它具有以下优点:您可以使用它而无需从中派生自己的类。但是,它的缺点还在于它不是虚拟控件,因此它不适合那些需要显示大量项目的情况:每次添加/插入字符串时,它都会在内部存储,因此会留下记忆。

它继承自ItemContainer,就像wx.ListBox一样,因此用法基本相同。请记住,您必须转义某些字符(如示例中所示)。为此,您可以使用cgi.escape

import wx
import cgi

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None)
        lb = wx.SimpleHtmlListBox(self)
        lb.Append( cgi.escape("foo <&> bar") )
        lb.Append("<b>Line 1</b> <br> Line 2")

app = wx.PySimpleApp()
frame = MyFrame().Show()
app.MainLoop()

答案 1 :(得分:0)

我对此表示怀疑。本机窗口小部件可能不支持Windows上的该行为。您可以使用DVC_CustomRenderer执行此操作(2.9系列中的新功能)。我知道你可以用UltimateListCtrl来做,因为演示本身就是这样。如果它是必备功能,我建议你去那条路。