我想在我的应用程序中使用wxListbook,但我需要使用不同文本格式的多行选项。
是否可以使用wxHtmlListbox作为wxListbook中的控件以及如何执行此操作?
答案 0 :(得分:0)
我不太确定你想要什么。您当然可以将HtmlListbox作为Listbook小部件中每个页面的子窗口小部件。您只需根据需要将其添加到每个页面元素。这是一个相当简单的例子:
import images
import wx
class MyHtmlListBox(wx.HtmlListBox):
def OnGetItem(self, n):
if n % 2 == 0:
return "This is item# <b>%d</b>" % n
else:
return "This is item# <b>%d</b> <br>Any <font color='RED'>HTML</font> is okay." % n
########################################################################
class MyPanel(wx.Panel):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent)
hlb = MyHtmlListBox(self, -1, size=(150, 250), style=wx.BORDER_SUNKEN)
hlb.SetItemCount(50)
hlb.SetSelection(0)
########################################################################
class ListbookDemo(wx.Listbook):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Listbook.__init__(self, parent, wx.ID_ANY,
style=wx.BK_DEFAULT)
# make an image list using the LBXX images
il = wx.ImageList(32, 32)
for x in range(3):
obj = getattr(images, 'LB%02d' % (x+1))
bmp = obj.GetBitmap()
il.Add(bmp)
self.AssignImageList(il)
pages = [(MyPanel(self), "Panel One"),
(MyPanel(self), "Panel Two"),
(MyPanel(self), "Panel Three")]
imID = 0
for page, label in pages:
self.AddPage(page, label, imageId=imID)
imID += 1
self.Bind(wx.EVT_LISTBOOK_PAGE_CHANGED, self.OnPageChanged)
self.Bind(wx.EVT_LISTBOOK_PAGE_CHANGING, self.OnPageChanging)
#----------------------------------------------------------------------
def OnPageChanged(self, event):
old = event.GetOldSelection()
new = event.GetSelection()
sel = self.GetSelection()
print 'OnPageChanged, old:%d, new:%d, sel:%d\n' % (old, new, sel)
event.Skip()
#----------------------------------------------------------------------
def OnPageChanging(self, event):
old = event.GetOldSelection()
new = event.GetSelection()
sel = self.GetSelection()
print 'OnPageChanging, old:%d, new:%d, sel:%d\n' % (old, new, sel)
event.Skip()
########################################################################
class DemoFrame(wx.Frame):
"""
Frame that holds all other widgets
"""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, wx.ID_ANY,
"Listbook Tutorial",
size=(700,400)
)
panel = wx.Panel(self)
notebook = ListbookDemo(panel)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(notebook, 1, wx.ALL|wx.EXPAND, 5)
panel.SetSizer(sizer)
self.Layout()
self.Show()
#----------------------------------------------------------------------
if __name__ == "__main__":
app = wx.App(False)
frame = DemoFrame()
app.MainLoop()
images
模块来自wxPython演示。我还将它上传到github:https://gist.github.com/driscollis/71312903470d9cf48f7c