如何在PyQt6的QGridLayout中实现单行控件垂直居中对齐
PyQt6 QGridLayout单行控件相对于跨行控件垂直居中解决方案
你当前遇到的问题核心是控件自身的内容对齐和控件在布局单元格中的对齐是两个独立配置:你之前给QLabel设置的setAlignment仅作用于Label内部的文本对齐,而前四个控件所在的第0行网格单元格,因为最后一个控件跨行占了2行高度,单元格整体高度被拉高,控件默认在单元格内顶部对齐,所以出现了现在的效果。
下面给出两种可直接落地的实现方案:
方案1:添加控件时直接指定对齐参数
修改你四个前导控件的addWidget调用,增加alignment参数指定垂直居中即可:
# 前四个控件添加时均指定单元格内垂直居中 layout.addWidget(self.progEnocean, 0, 0, alignment=Qt.AlignmentFlag.AlignVCenter) layout.addWidget(self.enoceanProgFile, 0, 1, alignment=Qt.AlignmentFlag.AlignVCenter) layout.addWidget(self.seccfgFile, 0, 2, alignment=Qt.AlignmentFlag.AlignVCenter) layout.addWidget(self.cpbBit, 0, 3, alignment=Qt.AlignmentFlag.AlignVCenter) # 最后一个跨行控件不需要修改,保持原有配置即可 layout.addWidget(self.enoceanOverallResult, 0, 4, 2, 2)
如果同时需要这四个控件在单元格内水平也居中,就把对齐参数改成Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter即可。
方案2:添加控件后单独设置布局对齐
如果不想修改原有addWidget的代码,也可以在控件添加完成后,给布局里的对应控件单独设置对齐规则:
layout.setAlignment(self.progEnocean, Qt.AlignmentFlag.AlignVCenter) layout.setAlignment(self.enoceanProgFile, Qt.AlignmentFlag.AlignVCenter) layout.setAlignment(self.seccfgFile, Qt.AlignmentFlag.AlignVCenter) layout.setAlignment(self.cpbBit, Qt.AlignmentFlag.AlignVCenter)
两种方案效果完全一致,可根据你的代码习惯选择。
内容的提问来源于stack exchange,提问作者ProgramMasher
相关产品推荐
相关产品推荐

