PyQt5 筆記(02):嵌套布局


如前一篇筆記,我們還是只討論兩層嵌套布局的情況。

前面的布局有一個缺點:有三個內層布局,則需要三個空部件。那若有十個內層布局呢?顯然會讓人不舒服。

剛才在玩 Qt Designer 時,發現了一個更好的辦法,不管有多少個內層布局,只需要一個空部件

 

一、過程分析:

1. 先准備一個全局部件用於"承載"全局布局

        # 全局部件(注意參數 self),用於"承載"全局布局
        wwg = QWidget(self)

 

2. 再定義全局布局

       wl = QVBoxLayout(wwg) # 全局布局(注意參數 wwg)

 

3. 定義三個局部布局

        vl = QVBoxLayout() # 三個局部布局
        hl = QHBoxLayout()
        gl = QGridLayout()

 

4. 當然,局部布局內肯定打算放置一些部件

        pass # 這里向局部布局內添加部件

 

5. 把三個局部布局加到全局布局

        wl.addLayout(vl) # 加到全局布局
        wl.addLayout(gl)
        wl.addLayout(hl)

 

二、全部代碼

from PyQt5.QtWidgets import *
 
 
class MyWindow(QWidget):  

    def __init__(self):  
        super().__init__()
        self.setWindowTitle('PyQt5布局示例')
        self.resize(400, 300)
        
        # 全局部件(注意參數 self),用於"承載"全局布局
        wwg = QWidget(self)
        
        wl = QVBoxLayout(wwg) # 全局布局(注意參數 wwg)

        vl = QVBoxLayout() # 三個局部布局
        hl = QHBoxLayout()
        gl = QGridLayout()
        
        pass # 這里向局部布局內添加部件

        wl.addLayout(vl) # 加到全局布局
        wl.addLayout(gl)
        wl.addLayout(hl)
       

if __name__=="__main__":    
    import sys    
    
    app = QApplication(sys.argv)    
    win = MyWindow()  
    win.show()  
    sys.exit(app.exec_())   

 

補充:

照上面的思路,更進一步,可以不要多余的空部件:

from PyQt5.QtWidgets import *

  
class MyWindow(QWidget):  

    def __init__(self):

        super().__init__()
        self.setWindowTitle('PyQt5布局示例')
        self.resize(400, 300)
        
        # 全局布局(注意參數 self)
        wl = QVBoxLayout(self) 

        # 局部布局
        vl = QVBoxLayout()
        hl = QHBoxLayout()
        gl = QGridLayout()
        
        # 這里向局部布局內添加部件
        hl.addWidget(QPushButton('1'))
        hl.addWidget(QPushButton('2'))
        vl.addWidget(QPushButton('3'))
        vl.addWidget(QPushButton('4'))
        vl.addWidget(QPushButton('5'))
        gl.addWidget(QPushButton('6'),0,0)
        gl.addWidget(QPushButton('7'),0,1)
        gl.addWidget(QPushButton('8'),1,0)
        gl.addWidget(QPushButton('9'),1,1)

        # 加到全局布局
        wl.addLayout(hl) 
        wl.addLayout(vl)
        wl.addLayout(gl)


if __name__=="__main__":
    import sys
    
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())

 

再補充:

addLayout()方法原型:

  addLayout(QLayout, row, col, row_cross, col_cross, Qt.Alignment)

addWidget()方法原型:

  addWidget(QWidget, row, col, row_cross, col_cross, Qt.Alignment)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM