PyQt中的半可调整大小的小部件

时间:2015-10-01 15:49:26

标签: qt python-3.x pyqt

我尝试使用两个主gui创建widgets。窗口应该可以调整大小。水平调整大小时,只应展开其中一个小部件。垂直调整大小时,两者都应该展开。此外,应该可以重新调整水平调整此分割的大小。我说明了这一点,使其更清晰:

Resize behavior

tkinter使用expandfill可以轻松实现Qt。在resize event我可以使用QHBoxLayout,但我希望我不必手动执行此操作,因为这毕竟是一项常见任务。我尝试用'use strict';来试图,但不幸的是没有成功。

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:3)

您需要在QSplitter上使用setStretchFactor方法。

示例(从QSplitter示例here修改):

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):     
        hbox = QtGui.QHBoxLayout(self)
        left = QtGui.QFrame(self)       
        left.setFrameShape(QtGui.QFrame.StyledPanel)
        right = QtGui.QFrame(self)
        right.setFrameShape(QtGui.QFrame.StyledPanel)
        splitter = QtGui.QSplitter(QtCore.Qt.Horizontal)
        splitter.addWidget(left)
        splitter.addWidget(right)
        splitter.setStretchFactor(1, 1)
        splitter.setSizes([125, 150])
        hbox.addWidget(splitter)
        self.setLayout(hbox)
        QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks'))
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QtGui.QSplitter')
        self.show()

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()  

这会生成一个如下所示的初始UI:

Initial UI

当图像水平扩展时,您可以看到左侧窗口小部件保持相同的大小:

Expanded horizontally

垂直展开时,两个小部件都会展开:

enter image description here

最后,拆分器可以调整大小:

Resizeable

如果在调整分割器后调整窗口大小,左侧小部件将保留其大小,右侧将展开/折叠以填充窗口的其余部分。