如何在QMainWindow中隐藏空的中央窗口

问题描述 投票:0回答:1

我希望创建一个仅带菜单栏的QMainWindow,然后每个菜单操作都可以触发打开QDialog。但是,我似乎无法让QMainWindow隐藏空白区域。我试图隐藏Centralwidget,并尝试使用其属性,但是没有什么可以让我摆脱空白,如下所示-

如何隐藏灰色区域?

“”

这是我想要实现的

“”

我看到的唯一“ hack”是将QMainWindow的大小调整为(w.e,21),并且将菜单栏的setGeometry设置为相同的(w.e,21),然后setFixedSize窗口。有没有更清洁的方法来解决这个问题?



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

python pyqt pyqt5
1个回答
0
投票

如果只想与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_())
© www.soinside.com 2019 - 2024. All rights reserved.