0

实际上我有一堆关于 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. 我想在对话框上放置一个按钮(例如确定),以便当程序完成计算时,用户可以按下它并且对话框可以关闭

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

感谢您的回复。

4

1 回答 1

0

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

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

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

于 2012-09-27T08:37:07.830 回答