PyQt5技术问题:如何动态调整Widget的显示位置?
PyQt5动态调整按钮位置实现靠左显示
我有如下GUI界面:初始界面包含一个“left”按钮和一个居中显示的“object”按钮。当点击left按钮时,希望object按钮能够靠左显示,效果等同于执行以下代码:
layout.addWidget(object) layout.addStretch()
现有代码如下:
from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * import sys class Widget(QWidget): def __init__(self): super().__init__() layout = QVBoxLayout() self.setLayout(layout) self.btnPos = QPushButton('left') self.btnPos.clicked.connect(self.btnClick) self.btnLayout = QHBoxLayout() self.btn = QPushButton('object') self.btnLayout.addStretch() self.btnLayout.addWidget(self.btn) self.btnLayout.addStretch() layout.addWidget(self.btnPos) layout.addLayout(self.btnLayout) def btnClick(self, check=False): print('click') pass if __name__ == '__main__': app = QApplication(sys.argv) win = Widget() win.show() app.exec_()
实现方案
修改btnClick方法,通过清空原有布局元素后重新添加按钮和右侧拉伸空间,即可实现按钮靠左显示:
def btnClick(self, check=False): # 清空HBoxLayout内的所有元素 while self.btnLayout.count(): item = self.btnLayout.takeAt(0) widget = item.widget() if widget: widget.deleteLater() # 重新添加按钮和右侧拉伸项,实现靠左效果 self.btnLayout.addWidget(self.btn) self.btnLayout.addStretch()
原理说明
- 初始布局中,
self.btnLayout通过前后各添加addStretch(),让按钮处于居中位置; - 点击按钮后,先清空布局内的所有元素(包括两个拉伸项和按钮);
- 重新添加按钮和右侧的拉伸项,此时按钮会紧贴布局左侧,右侧拉伸项占据剩余空间,达到目标效果。
内容的提问来源于stack exchange,提问作者Qiang Zhang
相关产品推荐
相关产品推荐

