PyQt4 tutorial读书笔记(3)--layout management

来源:互联网 发布:淘宝量子统计在哪里看 编辑:程序博客网 时间:2024/06/03 20:28

Layout management in PyQt4

==》总述:布局管理是我们在窗口上摆放小部件的方式。这种管理方式可以用两种基本方法来做。
(1)绝对布局(2)layout classes

一、Absolute positioning

1、程序指定了每个控件的位置和大小(以像素为单位)。但当你使用绝对布局的时候,必须接受一些限制:
(1)如果我们调整了窗口的大小,控件的位置和大小不会改变.
(2)在不同平台上应用的显示可能不一样。
(3)在应用中改变字体可能会破坏布局
(4)如果我们决定修改布局,我们必须重做布局,这是非常无聊并且浪费时间。

lbl1 = QtGui.QLabel('first',self)        lbl1.move(15,30)        lbl2 = QtGui.QLabel('second',self)        lbl2.move(25,60)        lbl3 = QtGui.QLabel('third',self)        lbl3.move(35,110)        self.setGeometry(300,300,250,150)        self.setWindowTitle('abslution')        self.show()

二、layout classes

1、Box layout

class Example(QtGui.QWidget):    def __init__(self):        super(Example, self).__init__()        self.initUI()    def initUI(self):        okButton = QtGui.QPushButton("OK")        cancelButton = QtGui.QPushButton("Cancel")        hbox = QtGui.QHBoxLayout()        hbox.addWidget(okButton)        hbox.addStretch(1)        hbox.addWidget(cancelButton)        vbox = QtGui.QVBoxLayout()        vbox.addStretch(1)        vbox.addLayout(hbox)        self.setLayout(vbox)            self.setGeometry(300, 300, 300, 150)        self.setWindowTitle('Buttons')            self.show()

(1) QtGui.QHBoxLayout 和 QtGui.QVBoxLayout是layout classes里面的两个基础类,用来控制控件水平或者垂直排列。
(2)

hbox.addWidget(okButton)hbox.addStretch(1)hbox.addWidget(cancelButton)

addWidget:在布局里面增加控件。
addStretch():我查了半天也不知道它怎么样使用最恰当,里面参数数字我改来改去也没啥变化,修改它在的位置,能够控制空白所在的地方。上面就是两个按钮之间。

vbox.addStretch(1)vbox.addLayout(hbox)

这个就属于空白在hbox布局之上。这个空白就像弹簧,根据你其他控件的大小来填充。

2、QtGui.QGridLayout

text = QtGui.QTextEdit()        hBox = QtGui.QHBoxLayout()        hBox.addWidget(text)        vBox = QtGui.QVBoxLayout()        vBox.addLayout(hBox)        grid = QtGui.QGridLayout()        vBox.addLayout(grid)        names = ['Cls', 'Bck', '', 'Close',                 '7', '8', '9', '/',                '4', '5', '6', '*',                 '1', '2', '3', '-',                '0', '.', '=', '+']        positions = [(i,j) for i in range(5) for j in range(4)]        for position,name in zip(positions,names):            if name == '':                continue            btn = QtGui.QPushButton(name,self)            grid.addWidget(btn,*position)        self.setLayout(vBox)        self.move(300,300)        self.show()

这里写图片描述
弄了半天文本框和按钮大小还是弄不好,文本框高度过高,几乎两者是一半一半比例,不知道为啥,把文本框当成grid中一员,也没能成功让它高度减小。

==>果然还是不熟悉的原因,QtGui.QLineEdit(self)改成这个就是一行的文本框了。
(1)grid.setSpacing(10)
我们创建一个网格布局,设置组件之间的间距。
(2)grid.addWidget(reviewEdit, 3, 1, 5, 1)
如果我们将一个小部件添加到网格,我们可以提供小部件的行和列的跨度跨越。在我们的例子中,我们让reviewEdit部件跨度5行。

0 0
原创粉丝点击