.
example.py
from sys import exit, argv
from PyQt5.QtCore import pyqtSignal, pyqtProperty, Q_ENUMS, QObject
from PyQt5.QtQml import QQmlApplicationEngine, qmlRegisterType
from PyQt5.QtGui import QGuiApplication
class Switch(QObject):
class State:
On = 0
Off = 1
Q_ENUMS(State)
stateChanged = pyqtSignal(State, arguments=['state'])
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._state = Switch.State.Off
@pyqtProperty(State, notify=stateChanged)
def state(self):
return self._state
@state.setter
def state(self, state):
if state != self._state:
self._state = state
self.stateChanged.emit(self._state)
app = None
def main():
global app
app = QGuiApplication(argv)
qmlRegisterType(Switch, 'Switch', 1, 0, 'Switch')
engine = QQmlApplicationEngine()
engine.load('example.qml')
exit(app.exec_())
if __name__ == '__main__':
main()
example.qml하는 데 도움이
import QtQuick 2.0
import QtQuick.Window 2.0
import Switch 1.0
Window {
title: 'QML Enum Example'
visible: true
width: 400
height: 400
color: colorSwitch.state === Switch.On ? "green" : "red"
Switch {
id: colorSwitch
state: Switch.Off
}
Text {
text: "Press window to switch state"
}
MouseArea {
anchors.fill: parent
onClicked: {
if (colorSwitch.state === Switch.Off)
colorSwitch.state = Switch.On
else
colorSwitch.state = Switch.Off
}
}
}
희망 : 여기에 작은 예입니다.
'파이썬'이'Qt'와 어떻게 작동하는지 모르겠지만'C++'에서는'Q_ENUMS'을 사용하여 열거 형을 내보낼 수 있습니다. Python-QML은 enum을 메타 객체 시스템으로 내보낼 수있는 비슷한 기능을 가지고있을 수 있습니까? – folibis
PyQt5에는 [QtCore.Q_ENUMS] (http://pyqt.sourceforge.net/Docs/PyQt5/metaobjects.html)이 있습니다. PyQt4도 가지고 있지만, 같은 방식으로 작동하지 않는 것으로 보이며, AFAICS는 문서화되어 있지 않습니다. – ekhumoro