Wxpython 自定义GridCellEditor崩溃python
我正在尝试设置一个自定义GridCellEditor 我的配置是Windows 7-64位,Python3.4.3-32位,wxPython Phoenix 3.0.3 我从《wxpython在行动》一书中获取并改编了示例代码 CellEditor工作正常,但当我尝试使用TAB验证内容,或单击网格上的其他地方时,Python崩溃了 从互联网上借用的一些其他代码也造成了同样的崩溃,例如 有人能帮我吗Wxpython 自定义GridCellEditor崩溃python,wxpython,Wxpython,我正在尝试设置一个自定义GridCellEditor 我的配置是Windows 7-64位,Python3.4.3-32位,wxPython Phoenix 3.0.3 我从《wxpython在行动》一书中获取并改编了示例代码 CellEditor工作正常,但当我尝试使用TAB验证内容,或单击网格上的其他地方时,Python崩溃了 从互联网上借用的一些其他代码也造成了同样的崩溃,例如 有人能帮我吗 import wx import wx.grid import string class Up
import wx
import wx.grid
import string
class UpCaseCellEditor(wx.grid.GridCellEditor):
def __init__(self):
wx.grid.GridCellEditor.__init__(self)
def Create(self, parent, id, evtHandler):
self._tc = wx.TextCtrl(parent, id, "")
self._tc.SetInsertionPoint(0)
self.SetControl(self._tc)
if evtHandler:
self._tc.PushEventHandler(evtHandler)
self._tc.Bind(wx.EVT_CHAR, self.OnChar)
def SetSize(self, rect):
self._tc.SetSize(rect.x, rect.y, rect.width+2, rect.height+2)
def BeginEdit(self, row, col, grid):
self.startValue = grid.GetTable().GetValue(row, col)
self._tc.SetValue(self.startValue)
self._tc.SetInsertionPointEnd()
self._tc.SetFocus()
self._tc.SetSelection(0, self._tc.GetLastPosition())
def EndEdit(self, row, col, grid):
changed = False
val = self._tc.GetValue()
if val != self.startValue:
changed = True
grid.GetTable().SetValue(row, col, val)
self.startValue = ''
self._tc.SetValue('')
return changed
def Reset(self):
self._tc.SetValue(self.startValue)
self._tc.SetInsertionPointEnd()
def Clone(self):
return UpCaseCellEditor()
def StartingKey(self, evt):
self.OnChar(evt)
if evt.GetSkipped():
self._tc.EmulateKeyPress(evt)
def OnChar(self, evt):
key = evt.GetKeyCode()
if key > 255:
evt.Skip()
return
char = chr(key)
if char in string.ascii_letters:
char = char.upper()
self._tc.WriteText(char)
else:
evt.Skip()
class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Grid Editor",
size=(640,480))
grid = wx.grid.Grid(self)
grid.CreateGrid(50,50)
grid.SetCellEditor(0, 0, UpCaseCellEditor())
app = wx.App()
frame = TestFrame()
frame.Show()
app.MainLoop()
我试过PyGridCellEditor,据说它已经被弃用了
>>> import wx
>>> wx.grid.PyGridCellEditor
class 'wx.core.deprecated.locals.DeprecatedClassProxy'
顺便说一句,PyGridCellEditor也有同样的问题。由于python崩溃,我无法从idle获得任何回溯。我仅有的信息来自Windows:
如果我能做些什么来获取更多信息,请告诉我:好吧,我终于找到了解决方案: EndEdit实际上又接受了一个位置参数oldval 那么,替换
def EndEdit(self, row, col, grid):
具有
达到理想的结果我认为,通过这个参数,代码也可以得到改进。
此外,ApplyEditself、row、col、grid应该被覆盖,这就是对表进行实际更改的地方…我看到的唯一问题是该代码没有运行。它应该使用PyGridCellEditor而不是GridCellEditor。您能发布您的回溯或错误消息,以便我们可以尝试找出问题所在吗?我对问题进行了一些更新,我能为解决问题提供更多帮助吗?谢谢!
def EndEdit(self, row, col, grid):
def EndEdit(self, row, col, grid, oldval):