以下非常简单的代码运行良好:python tmpmain.py
将为您提供一个带有帮助菜单的窗口,而Help-> About将为您提供一条消息。但是一旦我将tmp.py cythonize到扩展名,并将tmp.py重命名为tmp.py.bak以确保tmpmain.py调用了已编译的扩展名,python tmpmain.py
将导致RecursionError:调用时超出了最大递归深度一个Python对象。我已尽可能地简化了代码,希望它可以帮助调试。有什么建议吗?
#tmpmain.py
from tmp import main
if __name__ == '__main__':
main()
和
#tmp.py
from PySide2.QtWidgets import (QApplication, QMainWindow, QMenu, QMessageBox)
from PySide2.QtCore import Slot
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__()
self.setupHelpMenu()
def setupHelpMenu(self):
helpMenu = QMenu("&Help", self)
self.menuBar().addMenu(helpMenu)
helpMenu.addAction("&About", self.about)
@Slot()
def about(self):
QMessageBox.about(self, "About", "This is a demo")
import sys
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
编译tmp.py的命令是:
cythonize -X language_level=3 -i tmp.py
答案 0 :(得分:0)
这不是一个令人满意的解决方法,而不是答案:
实际上我以前和posted the same unsatisfactory workaround as a comment都遇到过这个问题。您需要通过更改以下行将函数调用包装在lambda函数中:
helpMenu.addAction("&About", self.about)
到
helpMenu.addAction("&About", lambda: self.about())
目前尚不清楚这究竟有何帮助,但我正在发布答案,以便针对变通办法,并希望这为某人提供了一个从哪里开始对故障进行正确诊断的线索。