PyQt + пользовательский объект QML: невозможно прочитать свойство 'x' из null - PullRequest
0 голосов
/ 24 мая 2018

Использование PyQt + QML довольно интуитивно понятно.Однако я немного озадачен.Привязка qml 'window.current.summary' жалуется на ошибку в заголовке Cannot read property 'summary' of null

Python:

class DataPoint(QObject):
    ....
    @pyqtProperty('QString')
    def summary(self):
        print("Retrieving summary: ", self._datapoint.summary)
        return self._datapoint.summary


class Weather(QObject):
    ....
    @pyqtProperty(DataPoint, notify=forecastChanged)
    def current(self):
        return DataPoint(self._forecast.currently())

    @pyqtProperty('QString', notify=forecastChanged)
    def current_summary(self):
        return self._forecast.currently().summary

QML:

Weather {
    id: w1
}

Text {
    ...
    id: current_temp
    text: w1.current.summary
    // text: w1.current_summary // this works
}

Думаю, япропустил что-то очевидное здесь.Я проверил, что свойство 'current' действительно опрошено.Retrieving summary никогда не виден, что указывает на то, что сама DataPoint никогда не опрашивается.Как мы можем заставить этот QML w1.current.summary связываться как ожидалось?

1 Ответ

0 голосов
/ 25 мая 2018

Я обнаружил проблему.Строки:

@pyqtProperty(DataPoint, notify=forecastChanged)
    def current(self):
        return DataPoint(self._forecast.currently())

Являются виновником.Изменение на

@pyqtProperty(DataPoint, notify=forecastChanged)
    def current(self):
        return self._datapoint

Где self._datapoint, ранее установленный в DataPoint, решает его.

Из этого я заключаю, что управление памятью в Python таково, что временные объекты действительно очень временны, больше похожи на C ++, чем на C #, а временный DataPoint сразу же исчезает из области видимости и памяти по возвращении current()

...