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)

  • 相关阅读:
    Ext.grid.行相关
    FORM 布局
    rs.open sql,conn,1,1全接触
    arguments.callee
    Ext.window.MessageBox xtype: messagebox ; Ext.Msg Ext.MessageBox
    Ext.grid.column
    sql
    正则
    转JS
    quickFilters
  • 原文地址:https://www.cnblogs.com/hhh5460/p/5173846.html
Copyright © 2011-2022 走看看