對于一個GUI應用,界面的布局管理是很重要的一部分,簡單地說,就是我們?nèi)绾畏胖弥皩W習的
QLabel
、QWidget
這些部件。在Qt里,你可以通過自己設置絕對位置來實現(xiàn),當然更值得推薦的方式是通過Qt的layout
類,現(xiàn)在我們先學習水平和垂直布局。
這里會用到兩個基本的布局類,QVBoxLayout
和QHBoxLayout
,V代表Vertical,H代表Horizontal,分別控制豎向和橫向的布局。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout
class Exp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
okbutton = QPushButton('Ok')
cancelbutton = QPushButton('Cancel')
hbox = QHBoxLayout()
hbox.addStretch()
hbox.addWidget(okbutton)
hbox.addWidget(cancelbutton)
vbox = QVBoxLayout()
vbox.addStretch()
vbox.addLayout(hbox)
self.setLayout(vbox)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Layout Management')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Exp()
sys.exit(app.exec_())
通過以上的代碼,我們將兩個按鈕放置在了窗口的右下角,即使我們調(diào)整窗口的大小,他們相對于窗口的位置還是右下角,這相對于設置絕對位置而言更具優(yōu)勢和靈活性。
hbox = QHBoxLayout()
hbox.addStretch()
hbox.addWidget(okbutton)
hbox.addWidget(cancelbutton)
以上的代碼,我們先創(chuàng)建了一個水平布局,然后把okbutton
,cancelbutton
放置在這個布局里面,這里還添加了一個addStrtch()
,它的作用是在布局中添加空白,并把非空白內(nèi)容頂?shù)讲季值奈膊浚▽τ?code>QHBoxLayout()而言是右邊,對于QVBoxLayout()
而言是底部),這也是按鈕始終能夠在窗口右下角的原因。
vbox = QVBoxLayout()
vbox.addStretch()
vbox.addLayout(hbox)
這里創(chuàng)建了一個豎向的布局,把之前創(chuàng)建的水平向布局作為豎向布局的一個部件(在這里也是唯一的部件)添加進來,同樣用到了addStretch()
。
self.setLayout(vbox)
我們之前創(chuàng)建了兩個布局,但這兩個布局不是平等的,而是包含關系,水平布局只是豎向布局的一個部件,所以豎向布局是這個界面的總布局,我們通過setLayout(bbox)
來應用豎向布局。
界面布局