python - 放在 QMainWindow 的 Central Widget 中的 QTabWidget 拉伸(stretch)太多,覆盖了菜单栏

标签 python windows pyqt5

就是这样,一个 QtabWidget 被放入了 QMainWindow 的 Central Widget 中,它拉伸(stretch)得太多并覆盖了菜单栏。至少我没有发现布局有什么问题,而且它非常简单,但对我不起作用。我知道导入很糟糕 :) 我正在使用最新的 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)

最佳答案

问题不在于选项卡小部件:它在于菜单栏。

QMainWindow class已经有一个 built-in method用于创建一个 men-bar,所以你不需要自己创建一个。 (您的示例中的菜单栏被选项卡小部件覆盖的原因是因为您没有将它添加到布局中)。

您示例中菜单的设置代码可以简化为:

    #--------
    # Menu
    #--------

    self.menu = self.menuBar().addMenu("Файл")
    self.actionSettings = self.menu.addAction("Настройки")
    self.actionExit = self.menu.addAction("Изход")
    self.actionExit.triggered.connect(self.close)

    #---------

关于python - 放在 QMainWindow 的 Central Widget 中的 QTabWidget 拉伸(stretch)太多,覆盖了菜单栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25631036/

相关文章:

Python - 加载了多少个默认模块

python - 如何使用 sqlalchemy python 连接 Postgresql 数据库

windows - 批处理文件通过迭代将文件复制到多台计算机?

c# - 如何仅当本地文件较旧时才下载文件

python - PyQt5:Gtk-CRITICAL **:IA__gtk_widget_style_get:断言 'GTK_IS_WIDGET (widget)' 失败

python - 如何清除QTextEdit的文本并立即插入新文本

python - 如何通过 python 的时间戳过滤 GCP stackdriver 日志

python - 是否可以通过不每次都生成新图形来加速交互式 IPython Notebook 绘图?

windows - 为什么 QString::localeAwareCompare() 不能正常工作

python - Pyqt5中KeyEvent的正确处理,捕获KeyPressEvent的问题