ДЧ
Қыр. 10, 2021, 8:17 Т.Қ.

Вызов функции Python с Qml

QML, PyQt5

Всем здравствуйте.

Незамысловатая задача появилась у меня - вызвать функцию Python с Qml.
Смотрел уроки на этом сайте, но что-то я не понимаю. Сверял код Qt C++, вроде как всё также, но не работает и прошу помощи у вас

Вот код:

main.py

  1. # This Python file uses the following encoding: utf-8
  2.  
  3. from PySide2.QtGui import QGuiApplication
  4. from PySide2.QtQml import QQmlApplicationEngine
  5. from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot
  6. from bs4 import BeautifulSoup
  7. import sys
  8. import os
  9. import requests
  10. import time
  11.  
  12. s = requests.Session()
  13. class Calculator(QObject):
  14. def __init__(self):
  15. QObject.__init__(self)
  16.  
  17. takeFunc = pyqtSignal()
  18.  
  19. @pyqtSlot()
  20. def result(self, text):
  21. while True:
  22. t=s.get("http://v.meni.mobi")
  23. soup = BeautifulSoup(t.text, 'html.parser')
  24. self.text=soup.find("div", class_="footer_share").find("a").get("href")
  25. print(text)
  26. time.sleep(1)
  27.  
  28.  
  29. if __name__ == "__main__":
  30. app = QGuiApplication(sys.argv)
  31. engine = QQmlApplicationEngine()
  32.  
  33. calculator = Calculator()
  34. engine.rootContext().setContextProperty("calculator", calculator)
  35.  
  36. engine.load(os.path.join(os.path.dirname(__file__), "main.qml"))
  37.  
  38. if not engine.rootObjects():
  39. sys.exit(-1)
  40. sys.exit(app.exec_())
  41.  

main.qml

  1. import QtQuick 2.15
  2. import QtQuick.Window 2.15
  3. import QtQuick.Extras 1.4
  4. import QtQuick.Controls 2.3
  5.  
  6. Window {
  7. width: 640
  8. height: 480
  9. visible: true
  10. title: qsTr("Hello World")
  11.  
  12. Connections {
  13. target: calculator
  14.  
  15. // Обработчик сигнала сложения
  16. onResult: {
  17.  
  18. }
  19. }
  20.  
  21. Button {
  22. id: button
  23. x: 207
  24. y: 167
  25. text: qsTr("Button")
  26. onClicked: calculator.result
  27. }
  28. }
  29.  

При компиляции такие ошибки ползут:

Буду очень благодарен советам или помощи

2

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

1
Evgenii Legotckoi
  • Қаз. 12, 2021, 11:49 Т.Ж.

Чтобы onResult в QML подключилось к чему-то в Python, нужно чтобы result было сигналом, а у вас это слот.
В качестве сигнала определено takeFunc и в данном случае в QML должно работать так

  1. Connections {
  2. target: calculator
  3.  
  4. // Обработчик сигнала сложения
  5. onTakeFunc: {
  6.  
  7. }
  8. }

    Пікірлер

    Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
    Кіріңіз немесе Тіркеліңіз