PyQt 5ノート(02):ネストレイアウト

4939 ワード

前のノートのように、2つのネストされたレイアウトだけを議論します.
前のレイアウトには、3つの内層レイアウトがある場合、3つの空の部品が必要です.では、10個の内層レイアウトがありますか?明らかに気分が悪い.
さっきQt Designで遊んでいたとき、もっと良い方法を見つけました.何個の内層レイアウトがあっても、空の部品が1つしか必要ありません.
 

一、プロセス分析:


1.「ベアラ」グローバルレイアウト用のグローバル構成部品を準備する
        #  (  self), " " 
        wwg = QWidget(self)

 
2.グローバルレイアウトの再定義
       wl = QVBoxLayout(wwg) #  (  wwg)

 
3.3つのローカルレイアウトを定義する
        vl = QVBoxLayout() #  
        hl = QHBoxLayout()
        gl = QGridLayout()

 
4.もちろん、ローカルレイアウトには必ず部品を配置する予定です
        pass #  

 
5.3つのローカルレイアウトをグローバルレイアウトに追加
        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)