Ich möchte ein QML-Modul mit einem Python "Backend" erstellen, wenn das sinnvoll ist. Grundsätzlich möchte ich QML verwenden, um zu definieren, wie die Komponente aussieht, und dann spezifisches Verhalten in einer Python-Klasse implementieren, was diesen QML-Typ erweitern sollte und - in meiner Vorstellung - irgendwie mit der QML-Komponente verknüpfbar sein muss.Qt5/PyQt5: Benutzerdefinierte QML-Komponenten mit QML-Frontend und Python-Backend
Ich verstehe, wie Sie eine benutzerdefinierte Klasse in Python erstellen und sie über QmlRegisterType für QML verfügbar machen. Das funktioniert so weit, aber dann die Zeichnung in der Klasse werden hat mich umgesetzt - ohne QML
(Im Grunde, was ich will, ist simliar auf den Weg, um es in Kivy mit der kv-Sprache erfolgt)
ein kleines Beispiel:
I implementiert ein einfaches Widget Colorpicker wie folgt aus:
class ColorWheel(QLabel):
radius = 0
color_changed = pyqtSignal(float, float)
def __init__(self, width, height):
super().__init__()
pixmap = QPixmap("colorwheel.png").scaled(width, height)
self.setFixedSize(width, height)
self.setPixmap(pixmap)
self.radius = width/2
def mouseReleaseEvent(self, event):
# {...} get mouse position, calc polar corrdinates (omitted)
# emit signal: new color was selected
self.color_changed.emit(r, angle)
def get_polar(self, x, y):
# {...} calculate polar coordinates for HSV color space (omitted)
return r, theta
Jetzt möchte ich die GUI-Code (pixmap Ziehen usw.) bewegen, um eine QML ColorWheel.qml wie diese Datei :
import QtQuick 2.0
Item {
Image {
id: img
anchors.fill: parent
source: "./colorwheel.png"
}
}
Im Haupt QML Datei main.qml ich dann so etwas wie dies tun will:
import QtQuick 2.2
import ColorWheel 1.0
ApplicationWindow {
title: qsTr("Test Invoke")
width: 500
height: 400
ColorWheel {
radius: 200
}
}
Ist das überhaupt möglich? Ich konnte dazu in der Qt und PyQt Dokumentation nichts finden. Es geht immer darum, C++ - Klassen für QML oder umgekehrt verfügbar zu machen ...
Kann mir jemand in die richtige Richtung zeigen?
Vielen Dank!
Ihre Lösung ist genau das, was ich suchte. Es hat eine Weile gedauert, bis ich die Beziehungen der Namen von Dateien und Klassen herausgefunden hatte, aber jetzt macht es Sinn. Vielen Dank! – Spritkopf