如何在QMainWindow中隐藏空的centralwidget

2024-05-23 23:13:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望创建一个只有一个菜单栏的QMainWindow,然后每个菜单操作都可以触发打开一个QDialog。然而,我似乎无法让QMainWindow隐藏这些空白。我试图隐藏centralwidget,并玩弄它的属性,但没有任何东西可以让我摆脱下面所示的空白空间-

如何隐藏灰色区域

这就是我想要实现的目标

我看到的唯一“黑客”是将QMainWindow调整为(w.e,21),并将菜单栏的几何设置为相同(w.e,21),然后将窗口设置为FixedSize。有没有更干净的方法



from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(500, 21)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
       # self.centralwidget.setEnabled(False)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth())
        self.centralwidget.setSizePolicy(sizePolicy)
        self.centralwidget.setMaximumSize(QtCore.QSize(0, 0))
        self.centralwidget.setObjectName("centralwidget")
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        MainWindow.setCentralWidget(self.menubar)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 500, 21))
        self.menubar.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
        self.menubar.setObjectName("menubar")
        self.menu_Available_View = QtWidgets.QMenu(self.menubar)
        self.menu_Available_View.setObjectName("menu_Available_View")
        self.menuatest = QtWidgets.QMenu(self.menu_Available_View)
        self.menuatest.setObjectName("menuatest")
        MainWindow.setMenuBar(self.menubar)
        self.actiontest = QtWidgets.QAction(MainWindow)
        self.actiontest.setObjectName("actiontest")
        self.menuatest.addAction(self.actiontest)
        self.menu_Available_View.addSeparator()
        self.menu_Available_View.addAction(self.menuatest.menuAction())
        self.menubar.addAction(self.menu_Available_View.menuAction())

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.menu_Available_View.setTitle(_translate("MainWindow", "&Available View"))
        self.menuatest.setTitle(_translate("MainWindow", "atest"))
        self.actiontest.setText(_translate("MainWindow", "test"))


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_())


Tags: selfviewtranslateavailablemenuqtcoreqtwidgetsqmainwindow
1条回答
网友
1楼 · 发布于 2024-05-23 23:13:47

如果您只想与QMenuBar交互,则无需使用QMainWindow:

from PyQt5 import QtCore, QtGui, QtWidgets


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)

    menubar = QtWidgets.QMenuBar()
    menubar.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))

    menu_Available_View = QtWidgets.QMenu(menubar)
    menuatest = QtWidgets.QMenu(menu_Available_View)

    actiontest = QtWidgets.QAction(menubar)
    menuatest.addAction(actiontest)
    menu_Available_View.addSeparator()
    menu_Available_View.addAction(menuatest.menuAction())
    menubar.addAction(menu_Available_View.menuAction())
    menu_Available_View.setTitle("&Available View")
    menuatest.setTitle("atest")
    actiontest.setText("test")

    menubar.setFixedHeight(menubar.sizeHint().height())
    menubar.resize(500, menubar.height())

    menubar.show()

    sys.exit(app.exec_())

相关问题 更多 >