我想使用
将多行消息添加到列表框中wx.listbox.Append('part1 \r\n part2')
在linux(gtk)上获取多行方框
在Windows(msw)上它只是忽略换行符......
有没有办法在Windows中获得类似的功能?
答案 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来做,因为演示本身就是这样。如果它是必备功能,我建议你去那条路。