PyQt4 bug when running multiple classes
好吧,也许这不是一个bug,但我不能让它工作。假设您必须使用Pyqt4的类。其中一个叫做audio.py,使用phonon播放声音文件。另一个名为gui.py,使用qtgui显示屏幕。GUI需要能够随时调用和使用audio.py(导入音频)。它将导入调用并将其发送到我的音频类,但由于音频未启动(双击可运行),因此它不包含代码(app=qapplication(sys.argv);sys.exit(app.exec_())。因此,当音频类在运行时运行时,当您导入它时,它将不会播放声音,因为它自己的Qapplication循环尚未启动。
有什么帮助吗?
编辑:添加了类引擎这是两个单独的python文件(.py)
导入库,播放器,系统
从pyqt4.qtgui导入qapplication
类引擎(对象):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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) |
如果uuu name_uuu==''uu main_uuu':
1 2 3 4 | app=QApplication(sys.argv) e=Engine('D:/Music/','Yeah!.mp3') e.updatePlayer('Play') sys.exit(app.exec_()) |
号
导入系统
从pyqt4.qtgui导入qapplication
从pyqt4.qtcore导入qObject
从pyqt4.phonon导入phonon
类播放器(QObject):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 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''' |
如果uuu name_uuu==''uu main_uuu':
1 2 3 4 | app=QApplication(sys.argv) p=Player('D:/Music/Yeah!.mp3') p.findStatus('Play') sys.exit(app.exec_()) |
。
要确保在事件循环已经运行时执行操作,请使用
1 | QtCore.QTimer.singleShot(0, some_function) |