В настоящее время у меня возникают некоторые проблемы с добавлением пунктов меню динамического c из PyQt в QAbstractListModel внутри QML Drawer.
В следующих ссылках можно найти соответствующие файлы QML, которые я использую: main.qml и NavigationDrawer.qml
hook.py:
class QDrawer(QQuickView):
close_button_clicked = QtCore.pyqtSignal()
error_triggered = QtCore.pyqtSignal()
on_transparent_frame_clicked = QtCore.pyqtSignal()
def __init__(self, parent=None, layout=None, drawerMenuEntriesList=[], callback=None):
super().__init__()
self.parent = parent
qmlRegisterType(QPythonBinding, "MyApplication", 1, 0, "QPythonBinding")
# Formatting of the QDrawer
self._format(QtGui.QColor(QtCore.Qt.transparent))
self._source_qml_file("main.qml")
self.setResizeMode(self.SizeRootObjectToView)
self.engine().rootContext().setContextProperty("QDrawer", self)
# Prevent from continuing if the QML file was not successfully sourced
if not self.engine().rootContext():
logger.error("No object could be loaded from sourced QML file and create a context out of it")
self.error_detected()
# Connections
self.statusChanged.connect(self.on_statusChanged)
self.transparent_frame = QWidget()
eventFilter_transparent_frame = _Filter(self.transparent_frame)
self.transparent_frame.installEventFilter(eventFilter_transparent_frame)
eventFilter_transparent_frame.released.connect(self.transparent_frame_clicked)
self._add_drawer_to_container_on_layout(layout)
# the callback function is propagated up to the ui_controller
self.populate(drawerMenuEntriesList, callback)
logger.debug(f"Drawer created")
...
def populate(self, drawerMenuEntriesList, callback):
menu = self._get_qml_component_by_objectname(QtCore.QAbstractListModel, "drawer_list")
qpybinding = QPythonBinding()
for entry in menuEntries:
logger.debug(f"≡ [Drawer]: Adding '{entry}' to drawer model")
qpybinding.addElement.emit(entry)
Полученный ящик выглядит следующим образом:
Идея состоит в том, чтобы заменить в меню выдвижного ящика записи «Фрагмент X» на любые пользовательские строковые записи, определяемые как « knifeMenuEntriesList"на заполнить () функция.