一些背景: REAPER是一个数字音频工作站,它具有广泛的脚本 API,包括 Lua、Python、C/C++ 和 EEL 绑定。我没有找到太多关于它如何在内部处理 Python 的信息。从表面上看,配置涉及指向系统某处的 Python DLL。截屏
问题:我尝试运行在 REAPER 中找到的 PyQt4 脚本的修改版本。起初它工作得很好
在随后运行相同的脚本时,出现了一个错误:
Traceback (most recent call last):
File "pyqt_test.py", line 2, in <module>
from PyQt4 import QtGui
RuntimeError: the sip module has already registered a module called PyQt4.QtCore
重新启动 REAPER 解决了再次运行脚本的问题,然后再次显示相同的错误。
谷歌搜索这个问题并没有太大帮助。PyQt 邮件列表中有一条消息提到了错误,并且解决方案涉及包的__init__
文件,但没有其他详细说明。
这是我正在运行的修改后的脚本:
import sys
from PyQt4 import QtGui
def main():
sys.argv = [] # necessary because for some reason argv doesnt exist when the script is run inside REAPER
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
layout = QtGui.QGridLayout()
buttons = {}
for i in range(16):
for j in range(16):
# keep a reference to the buttons
buttons[i, j] = QtGui.QPushButton('row %d, col %d' % (i, j))
# add to the layout
layout.addWidget(buttons[i, j], i, j)
widget.setLayout(layout)
widget.show()
app.exit(app.exec_())
if __name__ == '__main__':
RPR_defer('main()') # RPR_defer runs supplied code in REAPER's GUI thread.
关于发生了什么以及如何解决/解决它的任何想法?