我希望创建一个仅带菜单栏的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_())
如果只想与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_())