Я пишу программу на Python (файл test.py), а интерфейс на QML (файл test.qml). Но я не знаю, как передать данные из Python в QML и обратно.
Сейчас при нажатии на кнопку выводится сообщение “QML”, которое прописано в коде файла test.qml
Я хочу, чтобы при нажатии на кнопку в текстовом окне появилось содержимое переменной a=“Переменная из Python”, которая задана в файле test.py.
Помогите, пожалуйста, решить задачу
Код файла test.py (Python):
import sys # Класс QUrl предоставляет удобный интерфейс для работы с Urls from PyQt5.QtCore import QUrl from PyQt5.QtWidgets import QApplication, QWidget # Класс QQuickView предоставляет возможность отображать QML файлы. from PyQt5.QtQuick import QQuickView from PyQt5.QtGui import QGuiApplication from PyQt5.QtQml import QQmlApplicationEngine from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot a="Переменная из Python" if __name__ == '__main__': app = QApplication(sys.argv) # Объект QQuickView, в который грузится UI для отображения view = QQuickView() view.setSource(QUrl('test.qml')) view.show() app.exec_() sys.exit()
Код файла test.qml (QML):
import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 Rectangle { /// уникальный id, по которому можно обращаться к данному элементу id: mainRect /// указываю размеры width: 350 height: 200 /// указываю, чтобы прямоугольник отображалсяс рамкой серого цвета border.color: "LightGray" /// Объект линия, она самостоятельно ровняет элементы (согласно настройкам), /// которые размещаются внутри нее (кнопка и поле вывода) RowLayout { anchors.fill: parent /// заполняет полностью родительский элемент, т.е. прямоугольник mainRect spacing: 6 Button { id: buttonClickMe Layout.leftMargin: 10 /// отступ от левой границы 10 text: "Нажми на кнопку" // по нажатию на кнопку будет происходить: onClicked: { txtFild.text = 'QML' /// заменяем текст в поле txtFild на 'Привет!' console.log("QML") /// вывод текста в консоль } } /// текстовое поле TextField { id: txtFild text: "" } } }