我正在尝试使用wxPython创建一个应用程序。
我有一个sizer
,在sizer
内,我添加了ListCtrl
一些列表项。当我缩小sizer
(窗口)时,列表中的项目会以点...
显示。
我希望在调整窗口大小时,将每个项目的单词和内容放在多行中。我尝试过ListCtrl
,UltimateListCtrl
和ListCtrlAutoWidthMixin
。但是没有给出理想的输出。
有没有办法使用ListCtrl
或UltimateListCtrl
或任何其他小部件来实现这一目标?
答案 0 :(得分:2)
你可以用UltimateListCtrl制作它。
以下代码请参阅this,并进行了一些改进,以支持自动更新字符串拖动。
import wx
from wx.lib.wordwrap import wordwrap
import wx.lib.agw.ultimatelistctrl as ULC
class Frame(wx.Frame):
def __init__(self, *args, **kw):
wx.Frame.__init__(self, *args, **kw)
self.list = ULC.UltimateListCtrl(self, agwStyle=ULC.ULC_REPORT|ULC.ULC_HAS_VARIABLE_ROW_HEIGHT)
self.items = ['list', 'list', 'I want to wrap words and content shold be placed in multiple lines for each item as the window is resized']
colWidth = 200
self.colWidthPad = 5
self.list.InsertColumn(0, "test", width=colWidth)
for item in self.items[::-1]:
item = wordwrap(item, colWidth - self.colWidthPad, wx.ClientDC(self))
self.list.InsertStringItem(0, item)
self.list.Bind(wx.EVT_LIST_COL_DRAGGING, self.onDrag)
def onDrag(self, evt):
col = evt.GetItem().GetColumn()
width = self.list.GetColumnWidth(col)
itemCount = self.list.GetItemCount()
for i in range(0, itemCount):
text = wordwrap(self.items[i], width - self.colWidthPad, wx.ClientDC(self))
self.list.SetStringItem(i, col, text)
app = wx.App(False)
frm = Frame(None, title="ULC wordwrap test")
frm.Show()
app.MainLoop()