[Python] How to access qactions of qmenubar in PyQt5?

Discussão em 'Python' iniciado por Stack, Maio 20, 2025.

  1. Stack

    Stack Membro Participativo

    Is there any way to iterate and access the QMenu's Submenu and QActions?

    [​IMG]

    Menubar(QMenu) -> SubMenu(QMenu) -> QAction


    I am trying to remove/hide menu items based on certain conditions. Like hiding menu Reports or hide Stock Statements or hide Gold. So i need to iterate through the entire tree.

    Code:

    from PyQt5 import QtCore, QtGui, QtWidgets

    class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(800, 600)
    self.centralwidget = QtWidgets.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")
    MainWindow.setCentralWidget(self.centralwidget)
    self.menubar = QtWidgets.QMenuBar(MainWindow)
    self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
    self.menubar.setObjectName("menubar")
    self.menuMaintenance = QtWidgets.QMenu(self.menubar)
    self.menuMaintenance.setObjectName("menuMaintenance")
    self.menuStock_Items = QtWidgets.QMenu(self.menuMaintenance)
    self.menuStock_Items.setObjectName("menuStock_Items")
    self.menuStock_Modify = QtWidgets.QMenu(self.menuMaintenance)
    self.menuStock_Modify.setObjectName("menuStock_Modify")
    self.menuInput = QtWidgets.QMenu(self.menubar)
    self.menuInput.setObjectName("menuInput")
    self.menuReports = QtWidgets.QMenu(self.menubar)
    self.menuReports.setObjectName("menuReports")
    self.menuStock_Statements = QtWidgets.QMenu(self.menuReports)
    self.menuStock_Statements.setObjectName("menuStock_Statements")
    self.menuGroupwise_Statements = QtWidgets.QMenu(self.menuReports)
    self.menuGroupwise_Statements.setObjectName("menuGroupwise_Statements")
    self.menuPuritywise_Statements = QtWidgets.QMenu(self.menuReports)
    self.menuPuritywise_Statements.setObjectName("menuPuritywise_Statements")
    self.menuStaff_Statements = QtWidgets.QMenu(self.menuReports)
    self.menuStaff_Statements.setObjectName("menuStaff_Statements")
    self.menuExit = QtWidgets.QMenu(self.menubar)
    self.menuExit.setObjectName("menuExit")
    MainWindow.setMenuBar(self.menubar)
    self.statusbar = QtWidgets.QStatusBar(MainWindow)
    self.statusbar.setObjectName("statusbar")
    MainWindow.setStatusBar(self.statusbar)
    self.actionGold = QtWidgets.QAction(MainWindow)
    self.actionGold.setObjectName("actionGold")
    self.actionDiamond = QtWidgets.QAction(MainWindow)
    self.actionDiamond.setObjectName("actionDiamond")
    self.actionPurity_Master = QtWidgets.QAction(MainWindow)
    self.actionPurity_Master.setObjectName("actionPurity_Master")
    self.actionGold_2 = QtWidgets.QAction(MainWindow)
    self.actionGold_2.setObjectName("actionGold_2")
    self.actionDiamond_2 = QtWidgets.QAction(MainWindow)
    self.actionDiamond_2.setObjectName("actionDiamond_2")
    self.actionArrivals = QtWidgets.QAction(MainWindow)
    self.actionArrivals.setObjectName("actionArrivals")
    self.actionIssues = QtWidgets.QAction(MainWindow)
    self.actionIssues.setObjectName("actionIssues")
    self.actionGold_3 = QtWidgets.QAction(MainWindow)
    self.actionGold_3.setObjectName("actionGold_3")
    self.actionDiamond_3 = QtWidgets.QAction(MainWindow)
    self.actionDiamond_3.setObjectName("actionDiamond_3")
    self.actionGold_4 = QtWidgets.QAction(MainWindow)
    self.actionGold_4.setObjectName("actionGold_4")
    self.actionDiamond_4 = QtWidgets.QAction(MainWindow)
    self.actionDiamond_4.setObjectName("actionDiamond_4")
    self.actionGold_5 = QtWidgets.QAction(MainWindow)
    self.actionGold_5.setObjectName("actionGold_5")
    self.actionDiamond_5 = QtWidgets.QAction(MainWindow)
    self.actionDiamond_5.setObjectName("actionDiamond_5")
    self.actionCombined = QtWidgets.QAction(MainWindow)
    self.actionCombined.setObjectName("actionCombined")
    self.actionGold_6 = QtWidgets.QAction(MainWindow)
    self.actionGold_6.setObjectName("actionGold_6")
    self.actionDiamond_6 = QtWidgets.QAction(MainWindow)
    self.actionDiamond_6.setObjectName("actionDiamond_6")
    self.actionDiamond_7 = QtWidgets.QAction(MainWindow)
    self.actionDiamond_7.setObjectName("actionDiamond_7")
    self.actionGold_7 = QtWidgets.QAction(MainWindow)
    self.actionGold_7.setObjectName("actionGold_7")
    self.actionDaily_Arrivals_2 = QtWidgets.QAction(MainWindow)
    self.actionDaily_Arrivals_2.setObjectName("actionDaily_Arrivals_2")
    self.actionDaily_Issues = QtWidgets.QAction(MainWindow)
    self.actionDaily_Issues.setObjectName("actionDaily_Issues")
    self.menuStock_Items.addAction(self.actionGold)
    self.menuStock_Items.addAction(self.actionDiamond)
    self.menuStock_Modify.addAction(self.actionGold_2)
    self.menuStock_Modify.addAction(self.actionDiamond_2)
    self.menuMaintenance.addAction(self.menuStock_Items.menuAction())
    self.menuMaintenance.addAction(self.actionPurity_Master)
    self.menuMaintenance.addSeparator()
    self.menuMaintenance.addAction(self.menuStock_Modify.menuAction())
    self.menuInput.addAction(self.actionArrivals)
    self.menuInput.addAction(self.actionIssues)
    self.menuStock_Statements.addAction(self.actionGold_3)
    self.menuStock_Statements.addAction(self.actionDiamond_3)
    self.menuGroupwise_Statements.addAction(self.actionGold_4)
    self.menuGroupwise_Statements.addAction(self.actionDiamond_4)
    self.menuPuritywise_Statements.addAction(self.actionGold_5)
    self.menuPuritywise_Statements.addAction(self.actionDiamond_5)
    self.menuPuritywise_Statements.addSeparator()
    self.menuPuritywise_Statements.addAction(self.actionCombined)
    self.menuStaff_Statements.addAction(self.actionGold_6)
    self.menuStaff_Statements.addAction(self.actionDiamond_6)
    self.menuStaff_Statements.addSeparator()
    self.menuStaff_Statements.addAction(self.actionDiamond_7)
    self.menuReports.addAction(self.menuStock_Statements.menuAction())
    self.menuReports.addAction(self.menuGroupwise_Statements.menuAction())
    self.menuReports.addAction(self.menuPuritywise_Statements.menuAction())
    self.menuReports.addAction(self.menuStaff_Statements.menuAction())
    self.menuReports.addSeparator()
    self.menuReports.addAction(self.actionDaily_Arrivals_2)
    self.menuReports.addAction(self.actionDaily_Issues)
    self.menuReports.addSeparator()
    self.menubar.addAction(self.menuMaintenance.menuAction())
    self.menubar.addAction(self.menuInput.menuAction())
    self.menubar.addAction(self.menuReports.menuAction())
    self.menubar.addAction(self.menuExit.menuAction())

    self.retranslateUi(MainWindow)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    self.menuMaintenance.setTitle(_translate("MainWindow", "Maintenance"))
    self.menuStock_Items.setTitle(_translate("MainWindow", "Stock Items"))
    self.menuStock_Modify.setTitle(_translate("MainWindow", "Stock Modify"))
    self.menuInput.setTitle(_translate("MainWindow", "Input"))
    self.menuReports.setTitle(_translate("MainWindow", "Reports"))
    self.menuStock_Statements.setTitle(_translate("MainWindow", "Stock Statements"))
    self.menuGroupwise_Statements.setTitle(_translate("MainWindow", "Groupwise Statements"))
    self.menuPuritywise_Statements.setTitle(_translate("MainWindow", "Puritywise Statements"))
    self.menuStaff_Statements.setTitle(_translate("MainWindow", "Staff Statements"))
    self.menuExit.setTitle(_translate("MainWindow", "Exit"))
    self.actionGold.setText(_translate("MainWindow", "Gold"))
    self.actionDiamond.setText(_translate("MainWindow", "Diamond"))
    self.actionPurity_Master.setText(_translate("MainWindow", "Purity Master"))
    self.actionGold_2.setText(_translate("MainWindow", "Gold"))
    self.actionDiamond_2.setText(_translate("MainWindow", "Diamond"))
    self.actionArrivals.setText(_translate("MainWindow", "Arrivals"))
    self.actionIssues.setText(_translate("MainWindow", "Issues"))
    self.actionGold_3.setText(_translate("MainWindow", "Gold"))
    self.actionDiamond_3.setText(_translate("MainWindow", "Diamond"))
    self.actionGold_4.setText(_translate("MainWindow", "Gold"))
    self.actionDiamond_4.setText(_translate("MainWindow", "Diamond"))
    self.actionGold_5.setText(_translate("MainWindow", "Gold"))
    self.actionDiamond_5.setText(_translate("MainWindow", "Diamond"))
    self.actionCombined.setText(_translate("MainWindow", "Combined"))
    self.actionGold_6.setText(_translate("MainWindow", "Gold"))
    self.actionDiamond_6.setText(_translate("MainWindow", "Diamond"))
    self.actionDiamond_7.setText(_translate("MainWindow", "Combined"))
    self.actionGold_7.setText(_translate("MainWindow", "Gold"))
    self.actionDaily_Arrivals_2.setText(_translate("MainWindow", "Daily Arrivals"))
    self.actionDaily_Issues.setText(_translate("MainWindow", "Daily Issues"))


    if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())


    This is the code i am using. I need to add a function at the end which will validate user access level and removes certain menu options and their actions.

    Thanks.

    Continue reading...

Compartilhe esta Página