2016-05-15 67 views
0

我在長時間拍攝功能期間正在使用wxPython和動畫(gif)飛濺。到目前爲止,我有:wxPython中的動畫飛濺

class Splash(wx.SplashScreen): 

    def __init__(self, parent=None, id=-1): 

     image = "spinner.gif" 
     aBitmap = wx.Image(name =image).ConvertToBitmap() 
     splashStyle = wx.SPLASH_CENTRE_ON_PARENT 
     splashDuration = 0 # milliseconds 
     wx.SplashScreen.__init__(self, aBitmap, splashStyle, 
           splashDuration, parent) 

     gif = wx.animate.GIFAnimationCtrl(self, id, image,) 

     self.Show() 
     self.gif = gif 

    def Run(self,): 
     self.gif.Play() 

我想這樣做:

splash = Splash() 
splash.Run() 
result = very_time_consuming_function() 
splash.Close() 
... 
use the result 

任何輸入可以理解

回答

1

您應該執行的時間上的另一線程消耗的工作,否則GUI將阻止並不迴應。

  • 有一個工作線程執行耗時的任務。
  • 完成任務後,通知GUI線程以便消除飛濺。

這裏是一個片段:

import wx 
import wx.animate 
from threading import Thread 
import time 

def wrap_very_time_consuming_function(): 
    print "sleeping" 
    time.sleep(5) # very time consuming function 
    print "waking up" 
    wx.CallAfter(splash.gif.Stop) 
    return 0 

app = wx.App() 
splash = Splash() 
splash.Run() 
Thread(target=wrap_very_time_consuming_function).start() 
app.MainLoop() 
+0

但我需要從函數中使用的返回值。基本上我希望主功能「等待」,直到其他功能完成並在返回值上進一步使用,同時進行飛濺旋轉。我也嘗試在單獨的線程中啓動splash並從main調用函數,但它只讓我在主線程中運行動畫。 – Magen