Layout: QGridLayout
===
| Column 1 | Column 2 |
| -------- | -------- |
| `addWidget(QWidget, int r, int c)` | 加入一個元件於 `(r, c)` 相對位置上 |
| `addWidget(QWidget, int r, int c, int rowspan, int columnspan)` | 加入一個元件於 `(r, c)` 相對位位置上,且可以對此元件做縮排。`rowspan` 為負數代表跨列 ( `columnspa` 則跨行),請參考下面範例 |
```python
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def window():
app = QApplication(sys.argv)
win = QWidget()
grid = QGridLayout()
grid.addWidget(QPushButton("0,0"), 0, 0)
grid.addWidget(QPushButton("0,1"), 0, 1)
grid.addWidget(QPushButton("0,2"), 0, 2)
# 第三個參數1: 維持一列
# 第四個參數3: 延伸三行
grid.addWidget(QPushButton("1,3"), 1, 0, 1, 3)
# 第三個參數-1: 橫跨列
# 第四個參數 1: 維持一行
grid.addWidget(QPushButton("2,0"), 2, 0, -1, 1)
grid.addWidget(QPushButton("2,1"), 2, 1)
grid.addWidget(QPushButton("2,2"), 2, 2)
# 第三個參數-1: 橫跨列
# 第四個參數-1: 橫跨行
grid.addWidget(QPushButton("3,1"), 3, 1, -1, -1)
win.setLayout(grid)
win.setWindowTitle("PyQt")
win.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
```

## Ref.
[https://www.tutorialspoint.com/pyqt5/pyqt5\_qgridlayout\_class.htm](https://www.tutorialspoint.com/pyqt5/pyqt5\_qgridlayout\_class.htm)
[https://www.delftstack.com/zh-tw/tutorial/pyqt5/pyqt-grid-layout/](https://www.delftstack.com/zh-tw/tutorial/pyqt5/pyqt-grid-layout/)
###### tags: `PyQt5`