我目前在将动态菜单条目从 PyQt 添加到 QML Drawer 内的 QAbstractListModel 时遇到了一些麻烦。
在以下链接中可以找到我正在使用的相应 QML 文件:main.qml和NavigationDrawer.qml
drawer.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()
生成的抽屉如下所示:
这个想法是用populate()函数中的“ drawerMenuEntriesList ”确定的任何自定义字符串条目替换抽屉菜单中的条目“Fragment X” 。
qq_遁去的一_1
相关分类