wxPython:使用TextEditMixin时发生基类错误
我试图创建ListCtrl派生类来添加两个函数,wxPython:使用TextEditMixin时发生基类错误,wxpython,listctrl,Wxpython,Listctrl,我试图创建ListCtrl派生类来添加两个函数,set\u data和\u set\u column\u width,下面是代码: class ListReport(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin): def __init__(self, parent=None, columns=['DEFAULT'], size=wx.DefaultSize, pos=wx.DefaultPosition,
set\u data
和\u set\u column\u width
,下面是代码:
class ListReport(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
def __init__(self, parent=None, columns=['DEFAULT'], size=wx.DefaultSize,
pos=wx.DefaultPosition, style=wx.LC_REPORT|wx.LC_VRULES):
wx.ListCtrl.__init__(self, parent, wx.ID_ANY, pos, size, style)
listmix.ListCtrlAutoWidthMixin.__init__(self)
self.columns = columns
self.column_index = len(columns)
self.InsertColumn(0, 'No.')
for enum, column in enumerate(columns):
enum += 1
self.InsertColumn(enum, column)
def set_data(self, data):
# Change all data into str
values = [map(str, value) for value in data]
for enum, value in enumerate(values):
enum += 1
first = self.InsertStringItem(sys.maxint, str(enum))
for x in range(self.column_index):
if value[x] == None:
self.SetStringItem(first, x+1, '-')
else:
self.SetStringItem(first, x+1, value[x])
# Give ListCtrl some colors
if first % 2:
self.SetItemBackgroundColour(first, 'E8E8E8')
else:
self.SetItemBackgroundColour(first, '#FBFF94')
self._set_column_width(data)
def _set_column_width(self, data=None):
"""Automatically resize column based on data or column header
if column header longer than data using wx.LIST_AUTOSIZE_USEHEADER
else using data instead.
"""
for x in range(self.column_index):
longest = max([len(str(row[x])) for row in data])
if len(self.columns[x]) + 3 > longest:
self.SetColumnWidth(x+1, wx.LIST_AUTOSIZE_USEHEADER)
else:
self.SetColumnWidth(x+1, wx.LIST_AUTOSIZE)
self.SetColumnWidth(0, 37)
self.resizeLastColumn(0)
然后,我使用上面的类创建另一个具有TextEditMixin
class ListReportEdit(ListReport, listmix.TextEditMixin):
def __init__(self, parent=None, columns=['DEFAULT'], size=wx.DefaultSize,
pos=wx.DefaultPosition, style=wx.LC_REPORT|wx.LC_VRULES):
ListReport(parent, columns, size, pos, style)
listmix.TextEditMixin.__init__(self)
但是,我在尝试使用它时遇到了这个错误
Traceback (most recent call last):
File "wxform_sandbox.py", line 263, in <module>
a = Sandbox()
File "wxform_sandbox.py", line 27, in __init__
lr = ListReportEdit(panel, columns, size=(400, 300))
File "wxform_sandbox.py", line 145, in __init__
listmix.TextEditMixin.__init__(self)
File "C:\Program Files\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\lib\mixins\listctrl.py", line 451, in __init__
self.make_editor()
File "C:\Program Files\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\lib\mixins\listctrl.py", line 466, in make_editor
editor = wx.TextCtrl(self, -1, style=style)
File "C:\Program Files\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\_controls.py", line 1736, in __init__
_controls_.TextCtrl_swiginit(self,_controls_.new_TextCtrl(*args, **kwargs))
TypeError: in method 'new_TextCtrl', expected argument 1 of type 'wxWindow *'
回溯(最近一次呼叫最后一次):
文件“wxform_sandbox.py”,第263行,在
a=沙箱()
文件“wxform_sandbox.py”,第27行,在_init中__
lr=ListReportEdit(面板、列、大小=(400300))
文件“wxform_sandbox.py”,第145行,在_init中__
listmix.TextEditMixin.\uuuuu初始化\uuuuuuuu(self)
文件“C:\Program Files\Python27\lib\site packages\wx-2.8-msw-unicode\wx\lib\mixins\listctrl.py”,第451行,在uu init中__
self.make_编辑器()
文件“C:\Program Files\Python27\lib\site packages\wx-2.8-msw-unicode\wx\lib\mixins\listctrl.py”,第466行,在make\u编辑器中
编辑器=wx.TextCtrl(self,-1,style=style)
文件“C:\Program Files\Python27\lib\site packages\wx-2.8-msw-unicode\wx\\ u controls.py”,第1736行,在u init中__
_控件\uu.TextCtrl\u开关(self,\u控件\uu.new\u TextCtrl(*args,**kwargs))
TypeError:在方法“new_TextCtrl”中,应为“wxWindow*”类型的参数1
但是,当我使用wx.ListCtrl
作为ListReportEdit
的基类而不是ListReport
时,我并不清楚python继承是如何工作的
提前感谢尝试一下,您还没有调用parents init方法(您已经调用了,但是您正在创建一个新的ListReport对象)
啊..我的错,我没有仔细检查我的代码,谢谢你注意到了
class ListReportEdit(ListReport, listmix.TextEditMixin):
def __init__(self, parent=None, columns=['DEFAULT'], size=wx.DefaultSize,
pos=wx.DefaultPosition, style=wx.LC_REPORT|wx.LC_VRULES):
ListReport.__init__(self,parent, columns, size, pos, style)
listmix.TextEditMixin.__init__(self)