上一篇學(xué)習(xí)筆記學(xué)習(xí)了 Qt 中水平向和豎向的布局管理方式徐钠,其實(shí)更為常用的是網(wǎng)格布局昼接。網(wǎng)格布局方式可以把一個(gè)空間分割成行构韵、列的形式莱衩,需要用到
QGridLayout
類爵嗅。本文由 Cescfangs 譯自 ZetCode pyqt5系列教程 并作適當(dāng)修改。
先上源代碼:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton
class Exp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
grid = QGridLayout()
self.setLayout(grid)
name = ['Cal', 'Bck', ' ', 'Close',
'7', '8', '9', '/',
'4', '5', '6', '*',
'1', '2', '3', '-',
'0', '.', '=', '+']
position = [(i, j) for i in range(5) for j in range(4)]
for name, position in zip(name, position):
if name == ' ':
continue
button = QPushButton(name)
grid.addWidget(button, *position)
self.move(300, 150)
self.setWindowTitle('Simple Calculator')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Exp()
sys.exit(app.exec_())
通過以上的代碼笨蚁,我們用for
循環(huán)創(chuàng)建了5×4的網(wǎng)格按鈕(其中一個(gè)留空)睹晒。
grid = QGridLayout()
self.setLayout(grid)
這里創(chuàng)建了一個(gè)網(wǎng)格布局,并應(yīng)用到了我們的窗口里括细。
names = ['Cls', 'Bck', '', 'Close',
'7', '8', '9', '/',
'4', '5', '6', '*',
'1', '2', '3', '-',
'0', '.', '=', '+']
創(chuàng)建了一個(gè)names
列表伪很,用于存儲(chǔ)顯示在按鈕上的字符,在下面的代碼中會(huì)用到奋单。
positions = [(i,j) for i in range(5) for j in range(4)]
這里創(chuàng)建了positions
列表锉试,用于存儲(chǔ)網(wǎng)格的位置的信息(元組的形式,五行四列)览濒。
for position, name in zip(positions, names):
if name == ' ':
continue
button = QPushButton(name)
grid.addWidget(button, *position)
這一部分是最為關(guān)鍵的呆盖,zip()
函數(shù)用于配對(duì)拖云,這里把按鈕的位置和名稱按照順序一一組合起來,也可以理解為一個(gè)壓縮的過程应又,可以用*
解壓配對(duì)的數(shù)據(jù)宙项,*position
就把(i,j)
解壓開來,通過循環(huán)一次創(chuàng)建按鈕株扛,免去了手動(dòng)創(chuàng)建大量按鈕的工作尤筐。