wxPython CSheet PaintBackground()和EndEdit()错误

时间:2016-03-07 18:08:06

标签: python-2.7 wxpython

我一直在尝试使用Python v2.7.11和wxPython v3.0.2.0来创建电子表格应用。我能够创建并显示电子表格,但每当我输入一些内容(文本,数字等)到一个单元格python时抛出2个错误:

TypeError: PaintBackground() takes exactly 3 arguments (4 given)
TypeError: PaintBackground() takes exactly 3 arguments (4 given)

然后当我更改单元格(通过箭头键或鼠标)时,它会抛出另一个错误:

TypeError: EndEdit() takes exactly 4 arguments (5 given)

无论我进入细胞的是什么都没有保留(细胞仍然是空白的)。

我看到过这些错误,例如herehere,但都没有解决我的具体问题。我搜索了很多,似乎无法找到解决方案。感谢任何帮助,我的代码如下。

电子表格类:

from wx.lib.sheet import CSheet


class FFSpreadSheet(CSheet):
    def __init__(self, parent):
        super(FFSpreadSheet, self).__init__(parent)
        self._row = self._col = 0
        self.SetNumberRows(55)
        self.SetNumberCols(25)

        for i in xrange(55):
            self.SetRowSize(i, 20)

    def OnGridSelectCell(self, event):
        self._row, self._col = event.GetRow(), event.GetCol()
        control = self.GetParent().GetParent()._position
        value = self.GetColLabelValue(self._col) + self.GetRowLabelValue(self._row)
        control.SetValue(value)
        event.Skip()

框架类:

import wx
from ffspreadsheet import FFSpreadSheet


class FFMainFrame(wx.Frame):
    def __init__(self, parent, id, title):
        super(FFMainFrame, self).__init__(parent, -1, title, size=(550, 500))

        self._mainsizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(self._mainsizer)

        self._toolbar2 = wx.ToolBar(self, wx.TB_HORIZONTAL | wx.TB_TEXT)
        self._position = wx.TextCtrl(self._toolbar2)
        self._toolbar2.AddControl(self._position)
        self._toolbar2.Realize()

        self._notebook = wx.Notebook(self, -1, style=wx.RIGHT)

        self._sheets = [FFSpreadSheet(self._notebook),
                        FFSpreadSheet(self._notebook),
                        FFSpreadSheet(self._notebook)]
        self._sheets[0].SetFocus()

        self._notebook.AddPage(self._sheets[0], 'Sheet 1')
        self._notebook.AddPage(self._sheets[1], 'Sheet 2')
        self._notebook.AddPage(self._sheets[2], 'Sheet 3')

        self._mainsizer.Add(self._toolbar2)
        self._mainsizer.Add(self._notebook, 1, wx.EXPAND)

        self.Center()
        self.Show()

App类:

import wx
from ffmainframe import FFMainFrame


class FitFit(wx.App):
    def OnInit(self):
        self._mainframe = FFMainFrame(None, -1, 'FitFit')
        return True

if __name__=='__main__':
    app = FitFit()
    app.MainLoop()

1 个答案:

答案 0 :(得分:0)

2012年,PaintBackground()方法收到了一个新参数:设备上下文。

     def PaintBackground(*args, **kwargs):
-        """PaintBackground(self, Rect rectCell, GridCellAttr attr)"""
+        """PaintBackground(self, DC dc, Rect rectCell, GridCellAttr attr)"""

自2003年以来,CSheet类尚未更新。因此,它现在已被破坏。它仍然可以用作代码参考。

我认为您的示例受到我的教程的启发。最近,它已经更新;表格的例子也是如此。 CSheet已被删除,而wx.grid.Grid则被使用。

http://zetcode.com/wxpython/skeletons/