Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在第一次传递到wx.CallAfter之后,wxPython网格函数突然停止*可调用*_Python_Multithreading_Wxpython - Fatal编程技术网

在第一次传递到wx.CallAfter之后,wxPython网格函数突然停止*可调用*

在第一次传递到wx.CallAfter之后,wxPython网格函数突然停止*可调用*,python,multithreading,wxpython,Python,Multithreading,Wxpython,我使用:将wx.grid导入为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

我使用:
将wx.grid导入为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
对象?

代码没有执行您认为它正在执行的操作
wx.CallAfter
基本上是通过具有多个参数来调用的。第一个参数是对函数/方法
调用的引用。在
应调用后,以下参数是应在第一个参数中传递给函数/方法引用的参数(请参见
wx.\u core
):

您已经在post中指向了
wx.CallAfter
的完整源代码

相反,您要做的是自己调用方法/函数,并将结果传递给
CallAfter
。因此,第一个调用似乎是有效的,因为调用首先发生,而
CallAfter
稍后失败(因为它得到的结果是
…SetCellValue(…)

因此,您应该简单地为这两行编写:

wx.CallAfter(self.grid.SetCellValue, current_line - 1, 1, "SMTH")

在开始下一个问题之前,你是否可以接受其他问题的答案(或不同意答案)。
wx.CallAfter(self.grid.SetCellValue, current_line - 1, 1, "SMTH")