实际上我在wx.Python中有一堆关于wx.ProgressDialog的问题。
首先,我编写了一段代码,打开2个文件进行一些计算并将结果写入新文件。我需要在GUI中显示的是一个不确定模式的进度对话框,仅供用户了解程序正在运行。
def transformation(e):
prg_dlg = wx.ProgressDialog("Processing Data", "Time elapsed", style = wx.PD_ELAPSED_TIME)
for line in pntfile.readlines():
pntlist = line.split(" ")
pntlist = [float(i) for i in pntlist]
l = ( const + Xn*pntlist[0] + Yn*pntlist[1] + Zn*pntlist[2])/(Xn**2 * Yn**2 * Zn**2)
Xm = pntlist[0] - Xn*l
Ym = pntlist[1] - Yn*l
Zm = pntlist[2] - Zn*l
outlist=[0,0,0]
outlist[0] = pntlist[0] / 2*(Xm-pntlist[0])
outlist[1] = pntlist[1] / 2*(Ym-pntlist[1])
outlist[2] = pntlist[2] / 2*(Zm-pntlist[2])
outdata = str('%.4f' %outlist[0])+" "+str('%.4f' %outlist[1])+" "+str('%.4f' %outlist[2])+"\n"
outfile.writelines(outdata)
prg_dlg.UpdatePulse()
wx.Yield()
pntfile.close()
outfile.close()
当我运行完整的应用程序时,会出现进度对话框并且仪表来回过快,几乎无法看到(在MS WIN VISTA,7,XP,UBUNTU上测试)
我想在对话框上放置一个按钮(例如OK),这样当程序完成计算后,用户可以按下它,对话框可以关闭
最重要的是表现。当我在输入文件没有进度对话框中使用100万行运行程序时,它会在不到一分钟的时间内完成。使用上面代码中显示的对话框时,完成时间超过4分钟。我怎么能加快速度呢?
感谢您的回复。
答案 0 :(得分:0)
在一个单独的线程中运行计算,并且每1000行左右将更新消息发送到进度对话框。
请注意,您需要使用CallAfter或Event,因为您无法在线程中调用wxPython函数。
完成后,只需关闭进度对话框并显示一个带有确定按钮的简单消息框。