Registering a Python list property to QML in pyside2

删除回忆录丶 提交于 2019-11-29 08:59:59

You have to use QVariantList instead of list, besides the use of regular expressions may fail, in my case I use Linux and I generate problems, so the correct thing to do is to use QUrl:

class File(QtCore.QObject):
    filenameChanged = QtCore.Signal()
    sheetnamesChanged = QtCore.Signal()

    def __init__(self, *args, **kwargs):
        super(File, self).__init__(*args, **kwargs)
        self.__filename = ""
        self.__sheetnames = list()

    @QtCore.Slot(str)
    def load(self, filename):
        self.__filename = QtCore.QUrl(filename).toLocalFile()
        # Load the worksheet using openpyxl.
        try:
            workbook = openpyxl.load_workbook(filename=self.__filename)
        except openpyxl.utils.exceptions.InvalidFileException as exception:
            # Todo: write code to pass error to the user.
            print('Invalid File')
            return

        self.__sheetnames = workbook.sheetnames
        print(workbook.sheetnames)

    @QtCore.Property(str, notify=filenameChanged)
    def filename(self):
        return self.__filename

    @filename.setter
    def get_filename(self, name):
        if name == self.__filename:
            return
        self.__filename = name
        self.filenameChanged.emit()

    @QtCore.Property('QVariantList', notify=sheetnamesChanged)
    def sheetnames(self):
        return self.__sheetnames

    @sheetnames.setter
    def set_sheetnames(self, names):
        if names == self.__sheetnames:
            return
        self.__sheetnames = names[:]
        self.sheetnamesChanged.emit()

Output:

['Periodic Table']
qml: /home/eyllanesc/Downloads/Ultimate Periodic Table1.xlsx
qml: [Periodic Table]
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!