PyQt5編程(24):在窗口中布局組件—水平對(duì)齊和垂直對(duì)齊

容器組件(也稱為布局管理器或幾何管理器)克服了絕對(duì)定位的缺點(diǎn),在調(diào)整窗口大小時(shí),會(huì)自動(dòng)更改添加到容器中的所有組件的特征葛假,包括字體大小,文本長度等绵估。
有兩個(gè)類用于組件的對(duì)齊操作:

QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列。 構(gòu)造函數(shù)為:
QHBoxLayout([QWidget  parent]),[]表示參數(shù)為可選
QVBoxLayout:垂直布局蟆淀,在垂直方向上排列控件太援,即:上下排列。構(gòu)造函數(shù)為:
QVBoxLayout([QWidget  parent]),[]表示參數(shù)為可選

這兩類的繼承層次結(jié)構(gòu)如下:
(QObject扳碍,QLayoutltem) - QLayout - QBoxLayout - QHBoxLayout
(QObject,QLayoutltem) - QLayout - QBoxLayout - QVBoxLayout
這兩個(gè)類都不是QWidget類的繼承者仙蛉,因此沒有自己的窗口笋敞,不能單獨(dú)使用。 因此荠瘪,容器作為子控件使用夯巷。
可以在QHBoxLayout和QVBoxLayout類的構(gòu)造函數(shù)中指定父組件,也可將容器作參數(shù)哀墓,調(diào)用父組件的setLayout( )方法趁餐。
示例:

from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget() # 父窗口
window.setWindowTitle("QHBoxLayout")
window.resize(300, 60)
button1 = QtWidgets.QPushButton("1")
button2 = QtWidgets.QPushButton("2")
hbox = QtWidgets.QHBoxLayout() # 創(chuàng)建容器
hbox.addWidget(button1) # 添加組件
hbox.addWidget(button2)
window.setLayout(hbox) # 指定父組件
window.show()
sys.exit(app.exec_())

相關(guān)的方法有:

addWidget( ) -添加組件到容器的末尾,其格式為:
addWidget (Component [, stretch = 0] [, alignment = 0])
參數(shù)1:要加入容器的組件
參數(shù)2:拉伸方式篮绰,可選項(xiàng)
參數(shù)3:對(duì)齊方式后雷,可選項(xiàng)
參數(shù)2,3可按順序或指定名稱設(shè)置參數(shù):
hbox.addWidget(button1, 10, QtCore.Qt.AlignRight)
hbox.addWidget(button2, stretch=10)
hbox.addWidget(button3, alignment=QtCore.Qt.AlignRight)

 insertWidget () - 添加組件到容器的指定位置吠各,其格式為:
insertWidget (Index,Component [,stretch = 0] [, alignment = 0])
Index: 0,添加到容器的最前面臀突;-1,添加到容器的末尾贾漏。其他參數(shù)同addWidget( )候学。
hbox.addWidget (button1)
hbox.insertWidget (-1, button2) # 添加到容器的末尾
hbox.insertWidget (0, button3) # 添加到容器的最前面
removeWidget(Component) - 從容器中刪除組件;
replaceWidget( ) - 替換容器中的組件。格式為:
replaceWidget (component1, component2 [, options= FindChildrenRecursively])
參數(shù)1:被替換的組件
參數(shù)2:用來替換的組件
參數(shù)3:查找和替換方式纵散∈崧耄可以是QtCore.Qt中的FindDirectChildrenOnly(查找直接子組件)或FindChildrenRecursively( 遞歸查找子組件)。
addLayout( ) - 將另一個(gè)容器添加到當(dāng)前容器的末尾伍掀。 使用這種方法掰茶,可以將一個(gè)容器放入另一個(gè)容器中,從而創(chuàng)建一個(gè)復(fù)雜的結(jié)構(gòu)硕盹。 格式:
addLayout(Container [符匾,stretch = 0])
insertLayout() - 將另一個(gè)容器添加到當(dāng)前容器的指定位置。 如果第一個(gè)參數(shù)設(shè)置為負(fù)值瘩例,則將容器添加到末尾啊胶。 方法格式:
insertLayout(Index,Container [,stretch = 0])
insertSpacing (Index>, Size) - 添加空白間隔到特定位置垛贤。間隔的大小以像素為單位焰坪。如果第一個(gè)參數(shù)為負(fù)值,那么間隔將被添加到容器的末尾;
addStretch([stretch = 0]) - 將可拉伸空間添加到容器的末端聘惦。
insertStretch (Index [, stretch = 0]) - 作用與addStretch( )相似某饰,增加了指定位置的參數(shù)。 Index:-1,添加到容器的末尾.

addWidget( )和insertwidget( )方法中的alignment參數(shù)用來設(shè)置添加到容器中組件的對(duì)齊方式黔漂。 可以指定QtCore.Qt類的以下屬性:

AlignLeft,   1: 水平左對(duì)齊
AlignRight, 2: 水平右對(duì)齊
AlignHCenter, 4:水平居中
AlignJustify,8: 填滿空間
AlignTop诫尽,32:垂直上對(duì)齊
AlignBottom,64:垂直下對(duì)齊
AlignVCenter, 128:垂直居中
AlignBaseiine 炬守,256:垂直基線對(duì)齊;
AlignCenter- AlignVCenter|AlignHCenter-垂直牧嫉、水平均居中;
AlignAbsolute,16:如果通過setLayoutDirection()函數(shù)將對(duì)齊方式設(shè)置為 QtCore.Qt.RightToLeft(默認(rèn)為QtCore.Qt.LeftToRight)减途,AlignLeft(水平左對(duì)齊)實(shí)際表現(xiàn)為水平右對(duì)齊酣藻。要確保AlignLeft(水平左對(duì)齊)實(shí)際表現(xiàn)為水平左對(duì)齊鳍置,要和AlignAbsolute同時(shí)使用辽剧,即:AlignAbsolute|AlignLeft。
setDirection (direction) - 設(shè)置容器內(nèi)組件的排列方式税产,direction可為QBoxLayout類的枚舉變量:
? LeftToRight - 0 - 從左到右(水平容器的默認(rèn)方式)
? RightToLeft - 1 - 從右到左
? TopToBottom-2 - 從上到下(垂直容器的默認(rèn)方式)
? BottomToTop - 3 - 從下到上
setContentsMargins () - 設(shè)置容器四周的空白邊界砖第,格式為:
setContentsMargins (Left,Top,Right, Bottom)
hbox.setContentsMargins (2, 4, 2, 4)
m = QtCore.QMargins (4, 2, 4, 2)
hbox.setContentsMargins (m)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惕澎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子颜骤,更是在濱河造成了極大的恐慌唧喉,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忍抽,死亡現(xiàn)場(chǎng)離奇詭異八孝,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鸠项,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門干跛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人祟绊,你說我怎么就攤上這事楼入「绮叮” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵嘉熊,是天一觀的道長遥赚。 經(jīng)常有香客問我,道長阐肤,這世上最難降的妖魔是什么鸽捻? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮泽腮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衣赶。我一直安慰自己诊赊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布府瞄。 她就那樣靜靜地躺著碧磅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪遵馆。 梳的紋絲不亂的頭發(fā)上鲸郊,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音货邓,去河邊找鬼秆撮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛换况,可吹牛的內(nèi)容都是我干的职辨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼戈二,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼舒裤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起觉吭,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤腾供,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鲜滩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伴鳖,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年绒北,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了黎侈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闷游,死狀恐怖峻汉,靈堂內(nèi)的尸體忽然破棺而出贴汪,到底是詐尸還是另有隱情,我是刑警寧澤休吠,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布扳埂,位于F島的核電站,受9級(jí)特大地震影響瘤礁,放射性物質(zhì)發(fā)生泄漏阳懂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一柜思、第九天 我趴在偏房一處隱蔽的房頂上張望岩调。 院中可真熱鬧,春花似錦赡盘、人聲如沸号枕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葱淳。三九已至,卻和暖如春抛姑,著一層夾襖步出監(jiān)牢的瞬間赞厕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工定硝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留皿桑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓蔬啡,卻偏偏與公主長得像唁毒,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子星爪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容