例子:
#-*- coding: UTF-8 -*-#-------------------------------------------------------------------------------# Name: 模組mainFrame# Purpose: 應用程式的主介面## Author: ankier## Created: 16-12-2012# Copyright: (c) ankier 2012# Licence: <your licence>#-------------------------------------------------------------------------------try: from agw import floatspin as FSexcept ImportError: # if it's not there locally, try the wxPython lib. import wx.lib.agw.floatspin as FStry: from agw import ultimatelistctrl as ULCexcept ImportError: # if it's not there locally, try the wxPython lib. from wx.lib.agw import ultimatelistctrl as ULC import wximport sys## @detail MainFrame主介面視窗類別class MainFrame(wx.Frame): def __init__(self): #重新定向wxpython的輸出輸入和錯誤輸出到系統標準輸入輸出 sys.stdin = sys.__stdin__ sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ wx.Frame.__init__(self, None, wx.ID_ANY, 'Ultimate list ctrl demo', pos=wx.DefaultPosition, size=(800, 600), style=wx.DEFAULT_FRAME_STYLE) self.CreateStatusBar() panel = wx.Panel(self, -1) box = wx.FlexGridSizer(10, 2, 5, 5) button = wx.Button(panel, -1, 'Add') box.Add(button, 0, wx.ALIGN_CENTRE) button.Bind(wx.EVT_BUTTON, self.__OnAddClicked) self.listCtrls = ULC.UltimateListCtrl(panel, -1, size =(200, 100), style = ULC.ULC_MASK_TYPE, agwStyle = ULC.ULC_REPORT|ULC.ULC_HAS_VARIABLE_ROW_HEIGHT|ULC.ULC_NO_FULL_ROW_SELECT) self.listCtrls.InsertColumn(0, 'Name', ULC.ULC_FORMAT_CENTRE) self.listCtrls.InsertColumn(1, 'Selection', ULC.ULC_FORMAT_CENTRE) box.Add(self.listCtrls, 0, wx.ALIGN_CENTRE) panel.SetSizerAndFit(box) def __OnAddClicked(self, event): index = self.listCtrls.InsertStringItem(sys.maxint, 'name 1') panel = wx.Panel(self.listCtrls, -1) sizer = wx.BoxSizer(wx.VERTICAL) cbb = wx.ComboBox(panel, -1, value = '1', choices = ['1', '2', '3', '4', '5'], style = wx.CB_DROPDOWN|wx.TE_PROCESS_ENTER) sizer.Add(cbb, 1, wx.EXPAND) panel.SetSizer(sizer) #cbb = wx.Button(self.listCtrls, -1, 'Add') cbb.Bind(wx.EVT_PAINT, self.__OnPaint) self.listCtrls.SetItemWindow(index, 1, panel, expand = True) self.listCtrls.Update() def __OnPaint(self, event): event.Skip()
解決方案如代碼中,SetItemWindow(),添加control到列中的時候,可以先用wx.Panel做位其父控制項。這樣control不會被一直重繪。我在項目中用到ComboBox時候,遇到了這個情況。其他控制項暫時沒有遇到過。wxPython 還是有許多問題的。