0

を使用してリストボックスに複数のメッセージを追加しようとしています

wx.listbox.Append('part1 \r\n part2')

Linux(gtk)で複数行のボックスを取得している間

Windows(msw)では、改行を無視します...

Windowsで同様の機能を取得する方法はありますか?

4

2 に答える 2

2

WindowsのListBoxコントロールは、その動作を実装していません。アイテムを自分で描画して高さを調整することはできますが、wxWidgetsはこの機能をListBoxに公開しません。wx.SimpleHtmlListBox別の方法として、またはから派生することもできますwx.HtmlListBox

wxSimpleHtmlListBoxは、リストボックスの行にHTMLコンテンツを表示するwxHtmlListBoxの実装です。

wxHtmlListBoxとは異なり、これは抽象クラスではないため、独自のクラスを派生させずに使用できるという利点があります。ただし、これは仮想コントロールではないため、膨大な数のアイテムを表示する必要がある場合には適していません。文字列を追加/挿入するたびに、内部に保存され、したがって、メモリが必要になります。

ItemContainerwx.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()
于 2012-10-29T21:11:39.673 に答える
0

疑わしい。ネイティブウィジェットは、おそらくWindowsでのその動作をサポートしていません。ただし、DVC_CustomRendererを使用してそれを実行できる場合があります(2.9シリーズの新機能)。デモ自体が示すように、UltimateListCtrlを使用してそれを実行できることを私は知っています。それが必須の機能である場合、私はそのルートに行くことをお勧めします。

于 2012-10-29T17:35:26.240 に答える