创建仅影响 GUI 特定区域的选项卡

Create Tabs which affect only particular area of the GUI

我想创建仅针对 GUI 中特定区域的选项卡。 那就是应该有一个 GUI 区域是静态的,即使在更改选项卡时也始终存在。 我已经根据以下代码创建了选项卡:

import sys
from PyQt4 import QtGui


def main():

    app = QtGui.QApplication(sys.argv)
    tabs    = QtGui.QTabWidget()

    # Create tabs
    tab1    = QtGui.QWidget()   
    tab2    = QtGui.QWidget()
    tab3    = QtGui.QWidget()
    tab4    = QtGui.QWidget()

    # Resize width and height
    tabs.resize(1000, 1000)

    # Set layout of first tab
    vBoxlayout  = QtGui.QVBoxLayout()
    pushButton1 = QtGui.QPushButton("Start")
    pushButton2 = QtGui.QPushButton("Settings")
    pushButton3 = QtGui.QPushButton("Stop")
    vBoxlayout.addWidget(pushButton1)
    vBoxlayout.addWidget(pushButton2)
    vBoxlayout.addWidget(pushButton3)
    tab1.setLayout(vBoxlayout)   

    # Add tabs
    tabs.addTab(tab1,"Tab 1")
    tabs.addTab(tab2,"Tab 2")
    tabs.addTab(tab3,"Tab 3")
    tabs.addTab(tab4,"Tab 4")

    # Set title and show
    tabs.setWindowTitle('PyQt QTabWidget @ pythonspot.com')
    tabs.show()

    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我认为有几种解决方案可以实现这一点。
我举个例子。

首先,您需要创建一个主程序 window,您将在其中创建一个包含 2 个框架的布局(我在本示例中采用了网格布局)。完成后,您现在可以为每一帧设置一个布局,并根据需要在这些布局中添加小部件。它将填充框架。所以你可以用你的选项卡填充一个框架,一个保持固定。

我没有考虑小部件的大小,您可以根据需要调整它们。

我只是稍微修改了你的例子:

import sys
from PyQt4 import QtGui, QtCore


def main():

    app = QtGui.QApplication(sys.argv)
    mainWindow = QtGui.QWidget()

    mainLayout = QtGui.QGridLayout(mainWindow)

    frameLeft = QtGui.QFrame(mainWindow)
    frameLeft.setFrameShape(QtGui.QFrame.StyledPanel)
    frameLeft.setFrameShadow(QtGui.QFrame.Raised)
    gridLayoutLeft = QtGui.QGridLayout(frameLeft)
    mainLayout.addWidget(frameLeft, 0, 0, 1, 1, QtCore.Qt.AlignVCenter)

    frameRigth = QtGui.QFrame(mainWindow)
    frameRigth.setFrameShape(QtGui.QFrame.StyledPanel)
    frameRigth.setFrameShadow(QtGui.QFrame.Raised)
    gridLayoutRigth = QtGui.QGridLayout(frameRigth)
    mainLayout.addWidget(frameRigth, 0, 1, 1, 1, QtCore.Qt.AlignVCenter)

    tabs    = QtGui.QTabWidget()
    gridLayoutRigth.addWidget(tabs, 0, 0, 1, 1, QtCore.Qt.AlignVCenter)

    button = QtGui.QPushButton('test')
    gridLayoutLeft.addWidget(button, 0, 0, 1, 1, QtCore.Qt.AlignVCenter)

    # Create tabs
    tab1    = QtGui.QWidget()   
    tab2    = QtGui.QWidget()
    tab3    = QtGui.QWidget()
    tab4    = QtGui.QWidget()

    # Set layout of first tab
    vBoxlayout  = QtGui.QVBoxLayout()
    pushButton1 = QtGui.QPushButton("Start")
    pushButton2 = QtGui.QPushButton("Settings")
    pushButton3 = QtGui.QPushButton("Stop")
    vBoxlayout.addWidget(pushButton1)
    vBoxlayout.addWidget(pushButton2)
    vBoxlayout.addWidget(pushButton3)
    tab1.setLayout(vBoxlayout)   

    # Add tabs
    tabs.addTab(tab1, "Tab 1")
    tabs.addTab(tab2, "Tab 2")
    tabs.addTab(tab3, "Tab 3")
    tabs.addTab(tab4, "Tab 4")

    # Set title and show
    mainWindow.setWindowTitle('PyQt QTabWidget @ pythonspot.com')
    mainWindow.resize(mainWindow.sizeHint())
    mainWindow.show()

    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

希望对您有所帮助!