【问题标题】:Semi-resizable widgets in PyQtPyQt 中的半可调整大小的小部件
【发布时间】:2015-10-01 15:49:26
【问题描述】:

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

对于tkinter,这很容易通过属性expandfill 实现。在Qt 中,我可以使用resize event,但我希望不必手动执行此操作,因为这毕竟应该是一项常见任务。我尝试玩弄QHBoxLayout,但不幸的是没有成功。

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

【问题讨论】:

    标签: qt python-3.x pyqt


    【解决方案1】:

    您需要在您的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:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 2016-09-08
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多