Python QSoundEffect()不';当它';这超出了全球范围

Python QSoundEffect()不';当它';这超出了全球范围,python,pyqt5,Python,Pyqt5,我正在制作一个应用程序,将文件从一个目录复制到另一个目录。我希望它在过程结束时发出声音。当QSoundEffect在某个函数或类中时,我不知道如何使它产生声音。只有当代码如下所示时,它才会起作用: import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtMultimedia import * app = QApplication(sys.argv) win = QMainWindow()

我正在制作一个应用程序,将文件从一个目录复制到另一个目录。我希望它在过程结束时发出声音。当QSoundEffect在某个函数或类中时,我不知道如何使它产生声音。只有当代码如下所示时,它才会起作用:

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *


app = QApplication(sys.argv)
win = QMainWindow()

filepath = "C:\Windows\Media\Windows Error.wav"
sound = QSoundEffect()
sound.setSource(QUrl.fromLocalFile(filepath))
sound.play()
    
win.show()
sys.exit(app.exec_())
当代码看起来像这样时,为什么它不工作?如何使它在函数或类中工作

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *


def play_sound():
    filepath = "C:\Windows\Media\Windows Error.wav"
    sound = QSoundEffect()
    sound.setSource(QUrl.fromLocalFile(filepath))
    sound.play()


app = QApplication(sys.argv)
win = QMainWindow()
    
play_sound()

win.show()
sys.exit(app.exec_())
问题是“声音”是play_sound函数的局部变量,因此当该方法完成几乎是瞬时的执行时,它将被消除

解决方案是延长生命周期:

  • Python风格:使用全局变量

    sound=None
    def播放声音():
    filepath=“C:\Windows\Media\Windows Error.wav”
    全球声音
    声音=QSoundEffect()
    sound.setSource(QUrl.fromLocalFile(filepath))
    播放
    
  • Qt样式:设置父项

    def play_sound():
    filepath=“C:\Windows\Media\Windows Error.wav”
    sound=QSoundEffect(QCoreApplication.instance())
    sound.setSource(QUrl.fromLocalFile(filepath))
    播放
    

正如您已经指出的我的答案,它解决了您在帖子中指出的问题,因此如果您有其他问题(解决方案在线程中的实现),那么您必须创建另一个帖子,因为这是so的正确操作。请阅读并回顾这篇文章,想象每次解决方案在新场景中不再有效时,OP都会改变他的问题,这将使它永远无法解决帖子