Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 调整窗口大小时,PyQt5仅调整一个子窗口小部件的大小_Python_Qt_Layout_Resize_Pyqt - Fatal编程技术网

Python 调整窗口大小时,PyQt5仅调整一个子窗口小部件的大小

Python 调整窗口大小时,PyQt5仅调整一个子窗口小部件的大小,python,qt,layout,resize,pyqt,Python,Qt,Layout,Resize,Pyqt,我正在PyQt5中构建GUI。其结构如所附图片所示 我需要的是在调整窗口大小时管理它: 蓝色区域可水平和垂直调整大小 读取和绿色区域仅垂直调整大小 紫色区域仅水平调整大小 用户可以根据需要手动更改窗口小部件的大小,但当整个窗口调整大小时,应保持其宽度/高度 下面是此示例的代码: def initUI(self): topHBoxLayout = QHBoxLayout(self) topHBoxLayout.setContentsMargins(0,0,0,0)

我正在PyQt5中构建GUI。其结构如所附图片所示

我需要的是在调整窗口大小时管理它:

  • 蓝色区域可水平和垂直调整大小
  • 读取和绿色区域仅垂直调整大小
  • 紫色区域仅水平调整大小
  • 用户可以根据需要手动更改窗口小部件的大小,但当整个窗口调整大小时,应保持其宽度/高度
下面是此示例的代码:

def initUI(self):  

    topHBoxLayout = QHBoxLayout(self)
    topHBoxLayout.setContentsMargins(0,0,0,0) 

    sstFrame  = QFrame() 
    sstFrame.setMinimumSize(QSize(100, 100))
    self.colorFrame(sstFrame, 'red')

    objectivesFrame = QFrame() 
    objectivesFrame.setMinimumSize(QSize(100, 100))
    self.colorFrame(objectivesFrame, 'green')

    wsTop = QFrame() 
    wsTop.setMinimumSize(QSize(100, 100))
    self.colorFrame(wsTop, 'blue')

    wsBottom = QFrame() 
    wsBottom.setMinimumSize(QSize(100, 100))
    self.colorFrame(wsBottom, 'purple')

    workspaceSplitter = QSplitter(Qt.Vertical) 
    workspaceSplitter.addWidget(wsTop)
    workspaceSplitter.addWidget(wsBottom)


    mainSplitter = QSplitter(Qt.Horizontal)
    mainSplitter.addWidget(sstFrame)
    mainSplitter.addWidget(objectivesFrame)
    mainSplitter.addWidget(workspaceSplitter)

    topHBoxLayout.addWidget(mainSplitter)   

    self.setLayout(topHBoxLayout)

    self.setGeometry(300, 300, 300, 200)
    self.setWindowTitle('')
    self.show()

谢谢你的建议,我自己都想不出来。

无论我怎么做,我都无法让连接到单个拆分器实例的三个小部件工作(我尝试了SizePolicy设置、QSplitter拉伸因子等等)

因此,a尝试用几个Qframe来包装它,并且似乎有效。但我仍然对原始代码的解决方案持开放态度

以下是我的结果:

def initUI(self):  

    topHBoxLayout = QHBoxLayout(self)
    topHBoxLayout.setContentsMargins(0,0,0,0)

    sstObjWrapper = QSplitter(Qt.Horizontal) 
    sstObjWrapper.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)

    sstFrame  = QFrame() 
    sstFrame.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
    sstFrame.setMinimumSize(QSize(100, 100))
    self.colorFrame(sstFrame, 'red') 

    # --- sst frame ---

    objectivesFrame = QFrame() 
    objectivesFrame.setMinimumSize(QSize(100, 100))
    objectivesFrame.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
    self.colorFrame(objectivesFrame, 'green')

    sstObjWrapper.addWidget(sstFrame)
    sstObjWrapper.addWidget(objectivesFrame)

    tmp1  = QFrame(self)
    tmp1.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
    tmp1.setMinimumSize(QSize(200, 200))
    self.colorFrame(tmp1, 'purple') 

    tmp2  = QFrame(self) 
    tmp2.setMinimumSize(QSize(100, 100))
    tmp2.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
    self.colorFrame(tmp2, 'blue') 

    plotConsoleSplitter = QSplitter(Qt.Vertical)
    plotConsoleSplitter.addWidget(tmp1)
    plotConsoleSplitter.addWidget(tmp2)
    plotConsoleSplitter.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)


    objPlotSplitter = QSplitter(Qt.Horizontal)
    objPlotSplitter.addWidget(sstObjWrapper)
    objPlotSplitter.addWidget(plotConsoleSplitter)

    objPlotSplitter.setStretchFactor ( 0, 0 )
    objPlotSplitter.setStretchFactor ( 1, 1 )


    topHBoxLayout.addWidget(objPlotSplitter)

    self.setLayout(topHBoxLayout)
    self.setGeometry(300, 300, 300, 200)
    self.setWindowTitle('')
    self.show()

你有没有考虑过使用dockwidget而不仅仅是splitter?没有。我找到了解决问题的办法,不过还是要谢谢你的提示。我在官方的例子中发现了Dockwidget,它看起来确实很有趣。谢谢