PySide2學習記錄(五):布局和布局嵌套

Python版本3.7
PySide2 Version: 5.14.1
官方文檔:http://doc.qt.io/qtforpython/index.html

在界面上零远,如果手動來定位各個控件的話是非常不容易的,所以有了用于專門管理界面的控件研侣,稱為布局控件球碉。

所有布局控件都繼承自QLayout,但是這里不討論QLayout,只討論它的子類达布。

QVBoxLayout和QHBoxLayout
from PySide2.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QHBoxLayout

app = QApplication()

window = QWidget()
button1 = QPushButton("One")
button2 = QPushButton("Two")
button3 = QPushButton("Three")
button4 = QPushButton("Four")
button5 = QPushButton("Five")

# 創(chuàng)建一個垂直管理布局控件
layout = QVBoxLayout()
# layout = QHBoxLayout()
# 將button1添加到布局當中進行管理, 以下同理
layout.addWidget(button1)
layout.addWidget(button2)
layout.addWidget(button3)
layout.addWidget(button4)
layout.addWidget(button5)

window.setLayout(layout)
window.show()
app.exec_()

QVBoxLayoutQHBoxLayout分別是垂直布局控件和水平布局控件逾冬。有些人可能有疑問黍聂,這里的button實例為什么都沒有表明父類是誰,卻能正常顯示身腻。這是因為這些按鈕已經(jīng)被layout收起來集中管理了产还,然后window設置了布局控件為layout,所以只要layout能正常工作嘀趟,這些按鈕就會顯示出來脐区。

舉例說明

from PySide2 import QtWidgets, QtCore

class MyWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        # 創(chuàng)建一個二位數(shù)的lcd對象
        self.lcd = QtWidgets.QLCDNumber(2)
        self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
        # 設置slider大小范圍
        self.slider.setRange(0, 99)
        # 連接slider的valueChanged信號到lcd的display槽
        self.slider.valueChanged.connect(self.lcd.display)
        # 設置初始值為40,lcd會自動更新她按,因為已經(jīng)連接了信號和槽
        self.slider.setValue(40)
        # 創(chuàng)建一個垂直管理布局控件
        self.layout = QtWidgets.QVBoxLayout()
        self.layout.addWidget(self.lcd)
        self.layout.addWidget(self.slider)

        self.setLayout(self.layout)


app = QtWidgets.QApplication()
window = QtWidgets.QWidget()
# 創(chuàng)建一個水平管理布局控件
layout = QtWidgets.QHBoxLayout()

widget1 = MyWidget()
widget2 = MyWidget()
layout.addWidget(widget1)
layout.addWidget(widget2)

window.setLayout(layout)
window.show()
app.exec_()

運行截圖:

圖1

上面有一個新控件就是QLCDNumber牛隅,用于顯示數(shù)字的,然后自己定義了一個MyWidget類酌泰,包含了一個數(shù)碼管和一個滑動條媒佣,并把它們放到了垂直布局里面。在window對象中創(chuàng)建了兩個自定義對象和設置了水平布局陵刹。

QGridLayout
from PySide2 import QtWidgets, QtCore

app = QtWidgets.QApplication()

window = QtWidgets.QWidget()
# 創(chuàng)建網(wǎng)格布局對象
layout = QtWidgets.QGridLayout()

label1 = QtWidgets.QLabel('Nan')
lineedit1 = QtWidgets.QLineEdit()
label2 = QtWidgets.QLabel('Nan')
lineedit2 = QtWidgets.QLineEdit()

layout.addWidget(label1, 1, 1)
layout.addWidget(lineedit1, 1, 2)
layout.addWidget(label2, 2, 1)
layout.addWidget(lineedit2, 2, 2)

# 信號與槽的連接
lineedit1.textChanged.connect(label1.setText)
lineedit2.textChanged.connect(label2.setText)

window.setLayout(layout)
window.show()

app.exec_()

運行截圖:

圖2

新控件QLineEdit用來編輯單行文本的控件默伍。網(wǎng)格布局可以指定控件具體的位置。如果跨行或跨列設置的話,沒有控件的位置會被設置為空也糊。

QStackedLayout
from PySide2 import QtWidgets, QtCore

app = QtWidgets.QApplication()

window = QtWidgets.QWidget()

layout = QtWidgets.QVBoxLayout()
stacked_layout = QtWidgets.QStackedLayout()

combobox = QtWidgets.QComboBox()
combobox.addItems(['page1', 'page2', 'page3'])
layout.addWidget(combobox)
# 這里進行了嵌套布局炼蹦,所以布局都是可以嵌套的
layout.addLayout(stacked_layout)

btn1 = QtWidgets.QPushButton('btn1')
btn2 = QtWidgets.QPushButton('btn2')
btn3 = QtWidgets.QPushButton('btn3')
stacked_layout.addWidget(btn1)
stacked_layout.addWidget(btn2)
stacked_layout.addWidget(btn3)

combobox.activated.connect(stacked_layout.setCurrentIndex)

window.setLayout(layout)
window.show()

app.exec_()

QStackedLayout如果要切換的話,需要使用其它控件來給它發(fā)送信號显设。比如這里使用了QComboBox控件框弛,一個下拉列表,每次切換下拉列表的內容捕捂,相應頁面也會進行變化瑟枫。QFormLayoutQGridLayout很相似,一般表格提交頁面都會使用QFormLayout布局指攒,就不再舉例慷妙。

友情鏈接:
QHBoxLayout
QVBoxLayout
QLCDNumber
QGridLayout
QStackedLayout
QLineEdit
QComboBox

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市允悦,隨后出現(xiàn)的幾起案子膝擂,更是在濱河造成了極大的恐慌,老刑警劉巖隙弛,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件架馋,死亡現(xiàn)場離奇詭異,居然都是意外死亡全闷,警方通過查閱死者的電腦和手機叉寂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來总珠,“玉大人屏鳍,你說我怎么就攤上這事【址” “怎么了钓瞭?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長淫奔。 經(jīng)常有香客問我山涡,道長,這世上最難降的妖魔是什么唆迁? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任佳鳖,我火速辦了婚禮,結果婚禮上媒惕,老公的妹妹穿的比我還像新娘。我一直安慰自己来庭,他們只是感情好妒蔚,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般肴盏。 火紅的嫁衣襯著肌膚如雪科盛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天菜皂,我揣著相機與錄音贞绵,去河邊找鬼。 笑死恍飘,一個胖子當著我的面吹牛榨崩,可吹牛的內容都是我干的。 我是一名探鬼主播章母,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼母蛛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了乳怎?” 一聲冷哼從身側響起彩郊,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚪缀,沒想到半個月后秫逝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡询枚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年违帆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哩盲。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡前方,死狀恐怖,靈堂內的尸體忽然破棺而出廉油,到底是詐尸還是另有隱情惠险,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布抒线,位于F島的核電站班巩,受9級特大地震影響,放射性物質發(fā)生泄漏嘶炭。R本人自食惡果不足惜抱慌,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望眨猎。 院中可真熱鬧抑进,春花似錦、人聲如沸睡陪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至信殊,卻和暖如春炬称,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涡拘。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工玲躯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鳄乏。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓跷车,卻偏偏與公主長得像,于是被迫代替她去往敵國和親汞窗。 傳聞我的和親對象是個殘疾皇子姓赤,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容