PythonTip >> 博文 >> PyQt

PyQt4布局之QSpacerItem

zihua 2014-02-24 15:02:34 点击: 3654 | 收藏


PyQt4中的布局与PyGtk的概念一样, 下面对应关系如下:

PyQt4 PyGtk
QHBoxLayout HBox
QVBoxLayout VBox
QGridLayout Table
QFormLayout

相比之下, Qt中的布局更加强大,方便, 就比如说我们要实现这样的布局:

将这一组按钮放置到窗体的最右边,  根据以往的经验,将所有的button放到一个Hbox当中, 然后使用

Alignment伸展并占用左边的空间即可,  如果使用Pygtk注意Alignment的参数(0, 0, 0, 1), 代码就不写了, 大体如下:

那么使用Qt如何实现呢, 利用QSpacerItem:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

from PyQt4 import QtGui, QtCore

class MyWindow(QtGui.QWidget):
    
    def __init__(self):
        super(MyWindow, self).__init__()
        
        self.setMinimumSize(560, 180)
        
        vbox = QtGui.QVBoxLayout()
        hbox = QtGui.QHBoxLayout()
        
        hbox.addStretch()
        hbox.addWidget(QtGui.QPushButton("Menu"))
        hbox.addWidget(QtGui.QPushButton("Min"))
        hbox.addWidget(QtGui.QPushButton("Max"))
        hbox.addWidget(QtGui.QPushButton("Quit"))
        
        vbox.addLayout(hbox)
        vbox.addStretch()
        self.setLayout(vbox)
        
if __name__ == "__main__":        
    import sys
    app = QtGui.QApplication(sys.argv)
    win = MyWindow()
    win.show()
    app.exec_()

很难看是不是? 因为没自绘嘛,  但效果一样达到了

QSpacerItem

它就像一个弹簧, 默认情况下会将你放在layout中的空间压缩成默认的大小

它在Qt Designer中显示图标也就是弹簧的样子:

不需要直接使用它, 布局管理器已经使用它提供以下方法 :

  • QBoxLayout.addSpacing()
  • QBoxLayout.insertSpacing()
  • QBoxLayout.addStretch()
  • QBoxLayout.insertStretch()
  • QGridLayout.setRowMinimumHeight()
  • QGridLayout.setRowStretch()
  • QGridLayout.setColumnMinimumWidth()
  • QGridLayout.setColumnStretch()

在上面的例子中我们就使用了QBoxLayout.addStretch()占用左边的空间

再比如你有一个layout,里面有三个控件,一个放在最左边,一个放在最右边, 这就可以通过addStretch去实现

原文链接:http://www.tuicool.com/articles/iuyQni2

作者:zihua | 分类: PyQt | 标签: pyqt | 阅读: 3654 | 发布于: 2014-02-24 15时 |