V
7 ноября 2019 г. 18:42

Передача словаря из python в QT QML.

Добрый день.

Подскажите новичку, как из python-программы передать в QML словарь. Я могу отправлять это всё по одной строке, но так как-то чересчур избыточно.
Возможно также, что я не правильно понял саму концепциию фунцкционирования QML+PyQT5

Код у меня в таком стиле.

  1. class Chatter(QObject):
  2.  
  3. def __init__(self):
  4. QObject.__init__(self)
  5.  
  6. texts = {'pageAuth': {'txtIncorrect': 'Invalid credential from chatter',
  7. 'txtDontHaveAccount': 'You do not have acount?',
  8. 'txtRegister': 'Register'},
  9. 'pageFinal': {'txtResults': 'Do you wanna see your results? Press here.'}}
  10.  
  11.  
  12. signalTranslate = pyqtSignal(object, arguments=['pageAuth_txtD'])
  13.  
  14.  
  15. @pyqtSlot(str)
  16. def getText(self):
  17. self.signalTranslate.emit(self.texts)
  18.  
  1. Component.onCompleted: {
  2. chatter.getText()
  3. }
  4.  
  5. Connections {
  6. target: chatter
  7. onSignalTranslate: {
  8. console.log('pageAuth_txtD: ', pageAuth_txtD)
  9. }
  10. }
  11.  

вывод на консоль:

  1. qml: stack.txtD: QVariant(PyQt_PyObject, )
2

Вам это нравится? Поделитесь в социальных сетях!

2
Evgenii Legotckoi
  • 7 ноября 2019 г. 18:55
  • Ответ был помечен как решение.

Добрый день.

Тут надо бы подумать, как правильно производить конвертацию. Максимум, чему может отвечать словарь в Python, так это QVariantMap.

Так что я бы попробовал в первую очередь проверить сигнал в таком виде

  1. signalTranslate = pyqtSignal('QVariantMap', arguments=['pageAuth_txtD'])
    V
    • 7 ноября 2019 г. 19:29

    Пожалуй это как раз то, что мне нужно.

    1. console.log('pageAuth_txtD: ', pageAuth_txtD)
    2. console.log('Object.keys(pageAuth_txtD): ', Object.keys(pageAuth_txtD))
    3. console.log('JSON.stringify(pageAuth_txtD.pageAuth.txtDontHaveAccount): ', JSON.stringify(pageAuth_txtD.pageAuth.txtDontHaveAccount))
    1. qml: pageAuth_txtD: [object Object]
    2. qml: Object.keys(pageAuth_txtD): [pageAuth,pageFinal]
    3. qml: JSON.stringify(pageAuth_txtD.pageAuth.txtDontHaveAccount): "You do not have acount?"

    Спасибо за помощь. К тому же такую быструю.

      Комментарии

      Только авторизованные пользователи могут публиковать комментарии.
      Пожалуйста, авторизуйтесь или зарегистрируйтесь