2013-03-10 52 views
1

好吧,所以也許它不是一個錯誤,但我不能讓它工作。 說你必須使用PyQt4的類。一個叫做Audio.py並使用Phonon來播放聲音文件。另一個叫做GUI.py並使用QtGui來顯示一個屏幕。 GUI需要能夠隨時調用和使用Audio.py(導入音頻)。它會導入併發送呼叫到我的音頻類,但因爲音頻沒有啓動(雙擊運行)它不代碼(app = QApplication(sys.argv); sys.exit(app.exec_()))。因此當Audio類運行時,當您導入它時,它將不會播放聲音,因爲它自己的QApplication循環尚未啓動。PyQt4運行多個類時的錯誤

任何幫助?

編輯: 添加的類引擎 這些是2個獨立的Python文件(的.py)

導入庫,播放機,SYS

從PyQt4.QtGui進口的QApplication

類引擎(對象) :

def __init__(self,path,song=None): 
    self.counter=0 
    self.path=path 
    self.lib=Library.Library(self.path) 
    if song is None: 
     self.player=Player.Player(self.lib.getSong(self.counter)) 
    else: 
     self.player=Player.Player(path+song) 

def updatePlayer(self,songStatus): 
    self.player.findStatus(songStatus) 

def getCurrentSong(self): 
    return self.lib.getSong(self.counter) 

如果__ __ == '__ 主要 __':

app=QApplication(sys.argv) 
e=Engine('D:/Music/','Yeah!.mp3') 
e.updatePlayer('Play') 
sys.exit(app.exec_()) 

進口SYS

從PyQt4.QtGui進口的QApplication

從PyQt4.QtCore進口的QObject

從PyQt4中.phonon import phonon

級球員(的QObject):

def __init__(self,song): 
    super(QObject,self).__init__() 
    self.song=song 
    self.media=None 

    #self.metaInfo=Phonon.MediaObject(self) 
    #self.metaInfo.currentSourceChanged.connect(self.disMetaData) 

    self.initMedia() 
    self.findStatus() 


def initMedia(self): 
    if not self.media: 
     self.media=Phonon.MediaObject() 
     audioOutput=Phonon.AudioOutput(Phonon.MusicCategory,self) 
     Phonon.createPath(self.media,audioOutput) 
    self.media.setCurrentSource(Phonon.MediaSource(self.song)) 

def findStatus(self,status=None): 
    if status is not None: 
     if status=='Play': 
      self.playSong() 
      return 

     if status=='Stop': 
      self.stopSong() 
      return 

     if status=='Pause': 
      self.pauseSong() 
      return 

     if status=='Next': 
      nextSong() 
      return 

     if status=='Previous': 
      self.previousSong() 
      return 

def playSong(self): 
    self.media.play() 

def stopSong(self): 
    self.media.stop() 

def pauseSong(self): 
    self.media.pause() 

def nextSong(self): 
    '''nextSong code''' 

def previousSong(self): 
    '''previousSong code''' 

如果__ __ == '__ 主要 __':當事件

app=QApplication(sys.argv) 
p=Player('D:/Music/Yeah!.mp3') 
p.findStatus('Play') 
sys.exit(app.exec_()) 
+1

發佈說明問題的簡單測試。 – Blender 2013-03-10 21:43:31

+0

它很難發佈測試,因爲問題不是一個錯誤,代碼運行乾淨,但沒有做我想做的事 – 2013-03-10 21:49:23

+0

好吧,很難調試你看不到的代碼。 – Blender 2013-03-10 21:50:27

回答

0

要確保你做動作循環已在運行使用QTimer::singleShot

QtCore.QTimer.singleShot(0, some_function) 
+0

我發現解決方案是創建Player作爲GUI的子代,並將GUI作爲父代。那麼我所要做的就是把父母傳給孩子,現在它運行得很好!謝謝! http://stackoverflow.com/questions/14755305/open-a-gui-file-from-another-file-pyqt?rq=1 – 2013-03-12 02:05:50