这是一个QtabWidget被放到QMainWindow的中央控件中,并且延伸得太多,覆盖了菜单栏。 至less我没有看到布局的任何错误,这是相当简单的,但它不适合我。 我知道导入糟透了:)我正在使用最新的Windows版PyQt5。 有任何想法吗?
from PyQt5.Qt import * class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setBaseSize(800, 600) self.controllerMonitors = [] self.setWindowTitle("Window") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth()) self.setSizePolicy(sizePolicy) self.setMinimumSize(QSize(800, 450)) #-------- # Menu #-------- self.menuBar = QMenuBar(self) self.menuBar.setGeometry(QRect(0, 0, 800, 26)) self.menu = QMenu(self.menuBar) self.menu.setTitle("Файл") self.actionSettings = QAction(self) self.actionSettings.setText("Настройки") self.actionExit = QAction(self) self.actionExit.setText("Изход") self.menu.addAction(self.actionSettings) self.menu.addAction(self.actionExit) self.menuBar.addAction(self.menu.menuAction()) self.menu.addAction(self.actionSettings) self.menu.addAction(self.actionExit) self.actionExit.triggered.connect(self.close) #--------- # Toolbar #--------- # self.mainToolBar = QToolBar(self) # self.mainToolBar.setObjectName("mainToolBar") # self.addToolBar(Qt.TopToolBarArea, self.mainToolBar) #---------------- # Central widget #---------------- centralWidget = QWidget(self) centralWidgetLayout = QVBoxLayout(centralWidget) centralWidget.setLayout(centralWidgetLayout) # sizePolicy1 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) # sizePolicy1.setHorizontalStretch(0) # sizePolicy1.setVerticalStretch(0) # sizePolicy1.setHeightForWidth(centralWidget.sizePolicy().hasHeightForWidth()) # centralWidget.setSizePolicy(sizePolicy1) centralWidget.setContextMenuPolicy(Qt.NoContextMenu) tabContainer = QTabWidget(centralWidget) tab1 = QWidget(tabContainer) te = QTextEdit(tab1) tab1layout = QVBoxLayout(tab1) tab1.setLayout(tab1layout) tab1layout.addWidget(te) tabContainer.addTab(tab1, "Tab 1") tabContainer.setCurrentIndex(0) centralWidgetLayout.addWidget(tabContainer) self.setCentralWidget(centralWidget)
和main.py
import sys from PyQt5.QtWidgets import QApplication from MainWindow import MainWindow def main(argv): app = QApplication(argv) w = MainWindow() w.show() sys.exit(app.exec()) if __name__=="__main__": main(sys.argv)
问题不在于tab-widget:它与菜单栏有关。
QMainWindow类已经有一个内置的方法来创建一个男人吧,所以你不需要自己创建一个。 (你的例子中的菜单栏被tab-widget覆盖的原因是你没有将它添加到布局)。
您示例中菜单的设置代码可以简化为:
#-------- # Menu #-------- self.menu = self.menuBar().addMenu("Файл") self.actionSettings = self.menu.addAction("Настройки") self.actionExit = self.menu.addAction("Изход") self.actionExit.triggered.connect(self.close) #---------