如何在PyQt5的QGridLayout中添加QVBoxLayout以新增信息列
PyQt5主窗口新增信息列实现方案
你的实现思路是正确的,可通过嵌套布局完成需求,具体修改操作如下:
- 首先删除现有代码末尾错误添加的跨列摄像头标签代码:
layout.addWidget(label, 0,3,3,1),这行代码会把最后一个摄像头画面覆盖到第4列,不符合需求。 - 新增第4列专属的垂直布局,用来放置多行信息文本。你可以根据实际需求往这个垂直布局里添加任意数量的信息展示控件。
- 将垂直布局嵌入到原3行3列网格布局的第4列,设置跨3行显示即可。
核心修改代码示例
# 原有的网格布局初始化代码不变 layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(2) # ========== 新增代码开始 ========== # 创建第4列的垂直布局,用来放多行信息 info_layout = QVBoxLayout() info_layout.setSpacing(4) # 示例:添加3个信息展示标签,可根据需求调整数量和控件类型 self.info_label1 = QLabel("设备总览:9路摄像头") self.info_label1.setStyleSheet("color: white; background-color: black; padding: 6px;") self.info_label2 = QLabel("在线设备:7路") self.info_label2.setStyleSheet("color: green; background-color: black; padding: 6px;") self.info_label3 = QLabel("离线设备:2路") self.info_label3.setStyleSheet("color: red; background-color: black; padding: 6px;") # 把信息控件加到垂直布局里 info_layout.addWidget(self.info_label1) info_layout.addWidget(self.info_label2) info_layout.addWidget(self.info_label3) # 可调用addStretch()让信息控件靠上排列 info_layout.addStretch() # 把垂直布局放到网格布局的第1行(索引从0开始)第4列,跨3行占1列 layout.addLayout(info_layout, 0, 3, 3, 1) # ========== 新增代码结束 ========== # 原有的摄像头标签添加逻辑不变 self.labels: List[QLabel] = [] self.threads: List[Slot] = [] for index, value in self.cameras.items(): # 原有循环内的代码不需要修改 ...
原有布局示意图

修改后原3行3列的摄像头布局完全保留,第4列的垂直布局可以任意划分行数调整信息展示结构,不需要改动原有摄像头的布局逻辑。
内容的提问来源于stack exchange,提问作者YusufUcan
相关产品推荐
相关产品推荐

