0

我编译了我的 Qt 资源集合 (QRC) 并将其导入到我的 Python 项目中,现在我希望能够使用子进程访问我的 QRC 中的文件。我怎样才能做到这一点?

我在下面尝试了这个,但它没有访问已编译的 QRC ......

import application_rc

test = QUrl("qrc:///resources/sounds/LRMonoPhase4.wav").path()

process = subprocess.Popen(["aplay", test],
                           shell=False, stderr=subprocess.PIPE)
4

1 回答 1

2

QResource 只是 Qt 已知的资源,所以其他技术不知道如何处理 .qrc 方案,所以在这种情况下,您必须创建一个临时文件来保存音频并且 aplay 可以使用它:

import subprocess
from PySide2.QtCore import QFile, QFileInfo, QIODevice, QTemporaryFile
import application_rc


filename = ":///resources/sounds/LRMonoPhase4.wav"
file = QFile(filename)
fi = QFileInfo(file)
if file.open(QIODevice.ReadOnly):
    fp = QTemporaryFile("XXXXXX.{}".format(fi.completeSuffix()))
    if fp.open():
        fp.write(file.readAll())
        fp.seek(0)
        tmp_filename = fp.fileName()
        process = subprocess.Popen(
            ["aplay", "-vvv", tmp_filename], shell=False, stderr=subprocess.PIPE
        )
        process.communicate()

注意:如果要在使用 Qt 事件循环的应用程序中使用它,那么使用 QProcess 比使用 subprocess.Popen 更好。

于 2021-03-09T20:42:24.543 回答