【发布时间】:2017-03-22 16:13:25
【问题描述】:
问题:如何在小部件尺寸减小时使 PyQt 网格布局缩小?
期望的行为
在 PyQt 网格布局的标签中显示长字符串。网格会扩展以容纳标签。当标签重置为较短的字符串时,不再需要额外空间的网格会收缩。
实际行为
网格会扩展以容纳长标签,但不会收缩 标签变短。它保持扩展后的大小。
初始状态
显示长标签
标签被清除后网格保持展开状态
在 Python 3.5 中使用 PyQt5 (5.7) 的最小示例
下面的示例包括两个按钮和一个标签。一键将标签设置为 400 个字符长的星号字符串。另一个将标签设置为空字符串。
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (
QApplication,
QGridLayout,
QLabel,
QPushButton,
QWidget,
)
class TestUI(QWidget):
def __init__(self):
super().__init__()
self.lbl_feedback = QLabel('Long string goes here', self)
btn_long_string = QPushButton('Display a long string', self)
btn_long_string.clicked.connect(self._show_feedback_label)
btn_clear = QPushButton('Clear the long string', self)
btn_clear.clicked.connect(self._hide_feedback_label)
grid = QGridLayout()
grid.setSpacing(5)
# assemble grid
grid.addWidget(self.lbl_feedback, 0, 1, Qt.AlignCenter)
grid.addWidget(btn_long_string, 1, 1, Qt.AlignCenter)
grid.addWidget(btn_clear, 2, 1, Qt.AlignCenter)
# resize weights
grid.setColumnStretch(0, 10)
grid.setColumnStretch(1, 10)
grid.setColumnStretch(2, 10)
self.setLayout(grid)
self.show()
def _show_feedback_label(self):
long_string = '*' * 400
self.lbl_feedback.setText(long_string)
def _hide_feedback_label(self):
self.lbl_feedback.setText('')
if __name__ == '__main__':
app = QApplication(sys.argv)
test_ui = TestUI()
sys.exit(app.exec_())
【问题讨论】:
标签: python qt user-interface qt5 pyqt5