PySide2 在访问 QObject::property() 时崩溃

所以我不确定这是一个错误还是什么,但我花了很长时间来解决这个问题,但无法解决。访问调用QObject::property()函数时会出现问题。这是一个最小的可重现示例:


import sys


from PySide2 import QtCore

from PySide2.QtWidgets import QApplication

from PySide2.QtCore import Qt, QCoreApplication, QObject, Slot

from PySide2.QtQml import QQmlApplicationEngine, QQmlContext




class MyItem(QObject):

    def __init__(self):

        super(MyItem, self).__init__()

        self.name = "John"

        self.age = 22


    @QtCore.Property(QtCore.QObject, constant=True)

    def getName(self):

        return self.name


    @QtCore.Property(QtCore.QObject, constant=True)

    def getAge(self):

        return self.age


if __name__ == '__main__':

    app = QApplication(sys.argv)

    provider = MyModelProvider()

    item = MyItem()

    print(item.property("getName")) # the program crashes here

    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)

    QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)


    engine = QQmlApplicationEngine()

    engine.rootContext().setContextProperty('provider', provider)

    engine.load('qml/main.qml')

    sys.exit(app.exec_())

该程序总是崩溃并显示以下输出:


Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)


阿晨1998
浏览 350回答 1
1回答

收到一只叮咚

您的代码失败,因为返回的变量getName不是 aQObject而是 a str,类似于getAge返回 a int,因此解决方案是设置正确的签名import sysfrom PySide2.QtCore import Property, QObject, QCoreApplicationclass MyItem(QObject):    def __init__(self, parent=None):        super(MyItem, self).__init__(parent)        self.name = "John"        self.age = 22    @Property(str, constant=True)    def getName(self):        return self.name    @Property(int, constant=True)    def getAge(self):        return self.ageif __name__ == "__main__":    app = QCoreApplication(sys.argv)    item = MyItem()    print(item.property("getName"))    print(item.property("getAge"))输出:John22
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python