我使用:import wx.grid as gridlib
然后我在继承wx.Panel
的类中执行此操作:
self.grid = gridlib.Grid(self)
self.grid.CreateGrid(10000, 17)
它会创建一个大网格。现在,当我在另一个线程调用的函数中执行此操作时:
current_line = 1
wx.CallAfter(self.grid.SetCellValue(current_line - 1, 1, "SMTH"))
current_line += 1
wx.CallAfter(self.grid.SetCellValue(current_line - 1, 1, "SMTH"))
在第二个wx.CallAfter
我得到:
断言可调用(callableObj)," callableObj不可调用" AssertionError:callableObj不可调用
那么这意味着对象失去了它的方法?我的意思是python中的函数是对象,所以SetCellValue
对象以某种方式被删除了吗?
答案 0 :(得分:1)
代码没有做你认为它正在做的事情。 wx.CallAfter
基本上是通过多个参数来调用的。第一个参数是函数/方法CallAfter
应该调用的引用,以下参数是应该传递给第一个参数中的函数/方法引用的参数(参见{ {1}}):
wx._core
您已经指出this帖子中def CallAfter(callableObj, *args, **kw):
的完整来源。
您正在做的是自己调用方法/函数并将结果传递给wx.CallAfter
。因此,第一个调用似乎有效,因为调用首先发生,CallAfter
稍后失败(因为它得到CallAfter
的结果而不是引用。
所以你应该简单地写两行:
….SetCellValue(…)