【发布时间】:2015-05-07 00:34:11
【问题描述】:
我正在使用 wxPython 构建我的程序的 GUI,我无法运行一个函数,该函数使用线程从文件中获取数据并将其显示在 ObjectListView 中,从文件中读取数据运行良好但显示来自线程的数据有时会使整个程序崩溃。 gui.ProgressDialog 是一个 wx.Frame,它将显示进度条,直到线程完成。 self.dv 是一个 ObjectListView,一个从 wx.ListCtrl 派生的对象,set_data 是我写的一个函数,它遍历数据并将其添加到列表中。
def set_data(self,data):
"""set the data on the ObjectListView"""
pd = gui.ProgressDialog("Setting Data..")
def set_thread():
self.dv.set_data(data) #Takes time
pd.Close()
#opens a thread that sets the data
t = Thread(target = set_thread,name="SetDataThread")
t.start()
我读过一些关于wx.CallAfter 的内容,我应该使用它,但我不明白如何使用。我试着像这样调用 set_data -
wx.CallAfter(self.dv.set_data,data) 但它也不起作用。有人可以解释函数 wx.CallAfter , wx.CallLater , wx.PostEvent ,在使用 wxPython 线程时它们有什么帮助,我应该使用哪一个?或其他解决方案?
【问题讨论】:
-
除了更大的问题之外,您至少在一个函数调用上去掉了括号,这意味着进度对话框永远不会关闭……
-
什么是
self.dv,它的set_data有什么作用?
标签: python multithreading wxpython