#网络布局
grid = QGridLayout()
#循环追加到布局容器里
for line_number,line_data in self.data.items():
for col_number,value in enumerate(line_data):
btn = QPushButton(value)
grid.addWidget(btn, line_number, col_number)
显示的效果如下图
现在想让0左右占两个格子, .不要
代码如下
#网络布局
grid = QGridLayout()
#循环追加到布局容器里
for line_number,line_data in self.data.items():
for col_number,value in enumerate(line_data):
if value == ".":
continue
btn = QPushButton(value)
if value == "0":
grid.addWidget(btn, line_number, col_number,1,2)
else:
grid.addWidget(btn,line_number,col_number)
addWidget()接受可变参数
addWidget(btn, line_number, col_number,1,2)的参数分别表是QWidget对象,开始的行,开始的列,跨的行数,跨的列数
但是想把1和0合并的时候垂直方向却不能扩充,代码和显示如下
#网络布局
grid = QGridLayout()
#循环追加到布局容器里
for line_number,line_data in self.data.items():
for col_number,value in enumerate(line_data):
# if value in [ ".","2","0"]:
if value == "0":
continue
btn = QPushButton(value)
if value == "1":
grid.addWidget(btn, 2, 0,2,1,)
else:
grid.addWidget(btn,line_number,col_number)
1 按钮确实占了两个格,但是没有填充满.
于是打印出按钮的sizePolicy().verticalPolicy()和sizePolicy().horizontalPolicy()
if value == "1":
print(btn.sizePolicy().verticalPolicy())
print(btn.sizePolicy().horizontalPolicy())
grid.addWidget(btn, 2, 0,2,1,)
然后试了水平方向占两个格的值,也是0和1
这说明垂直方向默认固定大小,水平方向会填充,下面是官方的解释
然后我设置下了属性,把垂直方向也设置成了Minimum
for line_number,line_data in self.data.items():
for col_number,value in enumerate(line_data):
if value == "0":
continue
btn = QPushButton(value)
if value == "1":
btn.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
grid.addWidget(btn, 2, 0, 2, 1, )
print(btn.sizePolicy().verticalPolicy())
print(btn.sizePolicy().horizontalPolicy())
else:
grid.addWidget(btn, line_number, col_number)
然后再试着把2和.的格也占据,结果也能占据
for line_number,line_data in self.data.items():
for col_number,value in enumerate(line_data):
if value in [ ".","2","0"]:
continue
btn = QPushButton(value)
if value == "1":
btn.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
grid.addWidget(btn, 2, 0, 2, 2, )
print(btn.sizePolicy().verticalPolicy())
print(btn.sizePolicy().horizontalPolicy())
else:
grid.addWidget(btn, line_number, col_number)