zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    存图方式---邻接表&邻接矩阵&前向星
    Bellman-Ford算法的改进---SPFA算法
    POJ-2240 Arbitrage---判断正环+枚举
    POJ-1860 Currency Exchange---Bellman-Ford判断正环
    单源最短路径---Bellman-Ford算法
    ZOJ-2750 Idiomatic Phrases Game---Dijk最短路
    POJ-1135 Domino Effect---最短路Dijk
    单源最短路径---Dijkstra算法
    POJ-1679 The Unique MST---判断最小生成树是否唯一
    POJ-2031 Building a Space Station---MST + 空间距离
  • 原文地址:https://www.cnblogs.com/hhh5460/p/5173846.html
Copyright © 2011-2022 走看看