我可以在布局中包含的小部件中使用选项卡控件吗?

Can I have a tab control in a widget contained in a layout?

我正在尝试制作一个可编程的音序器,我可以在其中配置我编程的对象并创建它们的列表 运行。这需要我通过定义它的属性来实例化该对象,并且我想在下面显示的具有输入和输出选项卡的蓝色小部件上创建一个选项卡控件。

每当我尝试实现它时,它都会替换所有其他小部件:

这肯定是在小部件中使用标准选项卡控件的一种方式吧?

代码如下:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QGridLayout, QLabel, QMainWindow, QWidget, QTabWidget, QVBoxLayout
from PyQt5.QtGui import QColor, QPalette


# Placeholder widget for setting up layout
class Color(QWidget):
    def __init__(self, color):
        super().__init__()
        self.setAutoFillBackground(True)
        palette = self.palette()
        palette.setColor(QPalette.Window, QColor(color))
        self.setPalette(palette)


# Creating tab widgets
class MyTabWidget(QTabWidget):
    def __init__(self):
        super().__init__()
        self.setTabPosition(QTabWidget.North)
        for n, color in enumerate(['blue', 'purple']):
            self.addTab(Color(color), color)



class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("My App")
        layout = QGridLayout()
        # 1
        layout.addWidget(Color("red"), 0, 0, 2, 1)
        # 2
        layout.addWidget(Color("yellow"), 2, 0, 3, 1)
        # 3
        layout.addWidget(Color("green"), 0, 1, 5, 4)


        # 4
        # layout.addWidget(Color("blue"), 0, 5, 5, 1)
        tabs = MyTabWidget()
        layout.addWidget(tabs, 0, 5, 5, 1)

        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

QTabWidget 的大小策略设置为拉伸,由于 QGridLayout 项目的拉伸因子为 0,因此它会导致项目被压缩。解决方法是设置拉伸因子为1:

widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)

for column in range(layout.columnCount()):
    layout.setColumnStretch(column, 1)
for row in range(layout.rowCount()):
    layout.setRowStretch(row, 1)