业务场景
gridlayout不是固定的布局内容 内容数量也不固定 但是又要铺满整个布局 当内容数量变化的时候 需要重新计算每个item的宽高 使得尽量铺满整个布局 同时又要保证每个item的大小相同
def reLayoutSpectrum(self):
# 设置可见性
for i in range(self.channel_count):
if i not in self.visible_leads:
self.spectrumPlots[i][1].setVisible(False)
else:
self.spectrumPlots[i][1].setVisible(True)
# 清空布局
for i in reversed(range(self.spectrumLayout.count())):
widget = self.spectrumLayout.itemAt(i).widget()
self.spectrumLayout.removeWidget(widget)
if widget is not None:
widget.setParent(None) # 从布局中移除
# 把所有行和列的拉伸因子设置为0 清空!
for row in range(self.spectrumLayout.rowCount()):
self.spectrumLayout.setRowStretch(row, 0)
for col in range(self.spectrumLayout.columnCount()):
self.spectrumLayout.setColumnStretch(col, 0)
rows, cols = self.calculateGrid()
for index, plotIndex in enumerate(self.visible_leads):
row = index // cols
col = index % cols
# 设置每个导联的高度
self.spectrumLayout.addWidget(self.spectrumPlots[plotIndex][0], row, col)
# 设置行和列的拉伸因子以确保所有行和列的高度和宽度相等
for row in range(rows):
self.spectrumLayout.setRowStretch(row, 1)
for col in range(cols):
self.spectrumLayout.setColumnStretch(col, 1)