PyQt5 QMediaPlayer在类的命名空间中不起作用

时间:2018-08-26 00:26:01

标签: python pyqt pyqt5 qmediaplayer

我正在尝试在游戏中添加声音,尽管在简单的程序代码中它可以工作,但是每当我尝试将此代码放在某个类中时,它就会停止工作。

class myLabel(QLabel):
    def __init__(self, field):
        super().__init__(field)

    def mouseDoubleClickEvent(self, event: QtGui.QMouseEvent):
        if event.button() & QtCore.Qt.LeftButton:
            path = '/home/me/Desktop/sound.mp3'
            mediaContent = QMediaContent(QUrl.fromLocalFile(path))
            player = QMediaPlayer()
            player.setMedia(mediaContent)
            player.play()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    # this works
    path = '/home/me/Desktop/sound.mp3'
    mediaContent = QMediaContent(QUrl.fromLocalFile(path))
    player = QMediaPlayer()
    player.setMedia(mediaContent)
    player.play()

    # and this doesn't
    widget = myLabel('nope')
    widget.show()
    sys.exit(app.exec_())

我就是不明白为什么。有时候我可以在调试时得到声音。

upd:只是以为那个问题可能是我没有使用线程,但是以下代码却无法正常工作。也许问题可能出在系统上?尽管我在调试控制台中没有收到任何错误。

class PlayThread(QtCore.QThread):
    def __init__(self):
        super().__init__()

    def play(self):
        path = '/home/me/Desktop/sound.mp3'
        mediaContent = QMediaContent(QUrl.fromLocalFile(path))
        player = QMediaPlayer()
        player.setMedia(mediaContent)
        player.play()


class myLabel(QLabel):
    def __init__(self, field):
        super().__init__(field)

    def mouseDoubleClickEvent(self, event: QtGui.QMouseEvent):
        if event.button() & QtCore.Qt.LeftButton:
            player = PlayThread()
            player.play()

0 个答案:

没有答案