Я использую pyqt5 и pyside2, чтобы поиграться с элементами управления qtquick2, хотя pySide2 утверждает, что они используют синтаксис и логику pyQt, что не всегда верно, а документация pySide2 либо серьезно устарела, либо просто неточна.
(я понимаю, что pySide2 не готов к правильному использованию, но я все равно попытался бы освоиться с этим)
Например, использование слота я получаю
pyQt5
@pyqtSlot()
def sayHi(self):
print("Hi")
pySide2
@Slot()
def sayHi(self):
print("Hi")
Тогда просто из myQml я вызываю эту функцию, и она работает.
Однако мне нужны альтернативы для:
@pyqtProperty(float, notify=currentValueChanged)
@currentValue.setter
variableX =pyqtSignal()
И последний актуальный код:
import sys
import os
from PyQt5.QtCore import QObject, QUrl, Qt, pyqtSlot, pyqtSignal, pyqtProperty
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQml import QQmlApplicationEngine
class Manager(QObject):
#slider Value
currentValueChanged = pyqtSignal()
def __init__(self):
QObject.__init__(self)
self.m_currentValue =0
#slider
self.currentValueChanged.connect(self.on_currentValueChanged)
#slide stuff
@pyqtProperty(float, notify=currentValueChanged)
def currentValue(self):
return self.m_currentValue
#slider
@currentValue.setter
def currentValue(self, val):
if self.m_currentValue == val:
return
self.m_currentValue = val
self.currentValueChanged.emit()
#slider VOlUME CHANGED <<<<<<<<<<<<<<<<<<<<<<<<< WORKS>>>>>>>>>>>>>>>>>>>>>>
@pyqtSlot()
def on_currentValueChanged(self):
print(self.m_currentValue)
if __name__ == "__main__":
os.environ["QT_QUICK_CONTROLS_STYLE"] = "Material"
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
manager = Manager()
ctx = engine.rootContext()
ctx.setContextProperty("Manager", manager)
engine.load('main.qml')
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec_())
QML
import QtQuick 2.10
import QtQuick.Controls 2.1
import QtQuick.Window 2.2
import QtQuick.Controls.Material 2.3
ApplicationWindow {
id: applicationWindow
Material.theme: Material.Light
title: qsTr("Test Invoke")
visible: true
width: 600
height: 500
Slider {
id: slider
x: 160
y: 311
value: 0.5
property bool updateValueWhileDragging: true
onMoved: Manager.currentValue = value
}
}
код выше, например, использует pyQT5 и qtQuick2, чтобы просто распечатать значение ползунка, когда ползунок перемещен.
Есть ли способ реализовать это с pySide2, я попробовал несколько вариантов, и я могу делать простые нажатия кнопок в pySide, однако для свойств и установок в pySide я не нашел никакой ценной информации. (хорошо то, что я нашел, было устаревшим и для qtQuick1)
если кто-нибудь даст мне рабочий пример или покажет мне куда-нибудь, я буду очень благодарен! веселит