如何使用wx.Python操作wx.ProgressDialog

时间:2012-09-27 07:39:27

标签: wxpython python-2.7

实际上我在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()    
  1. 当我运行完整的应用程序时,会出现进度对话框并且仪表来回过快,几乎无法看到(在MS WIN VISTA,7,XP,UBUNTU上测试)

  2. 我想在对话框上放置一个按钮(例如OK),这样当程序完成计算后,用户可以按下它,对话框可以关闭

  3. 最重要的是表现。当我在输入文件没有进度对话框中使用100万行运行程序时,它会在不到一分钟的时间内完成。使用上面代码中显示的对话框时,完成时间超过4分钟。我怎么能加快速度呢?

  4. 感谢您的回复。

1 个答案:

答案 0 :(得分:0)

在一个单独的线程中运行计算,并且每1000行左右将更新消息发送到进度对话框。

请注意,您需要使用CallAfter或Event,因为您无法在线程中调用wxPython函数。

完成后,只需关闭进度对话框并显示一个带有确定按钮的简单消息框。