【问题标题】:PyQt5 grid layout expands for big widgets, but doesn't contract for small widgetsPyQt5 网格布局为大部件扩展,但不为小部件收缩
【发布时间】: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


    【解决方案1】:

    我认为主窗口是不可能的,因为我在 Qt Designer 中找不到它。但是您可以在 label.changed 信号上调用 mainwindow.adjustSize()。

    更新: 对不起我错了。 QLabel 没有“改变”的信号。 其他方式:

    def _hide_feedback_label(self):
        self.lbl_feedback.setText('')
    
        self.adjustSize() # <--
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-29
      • 2016-12-12
      • 2021-05-22
      • 2017-07-07
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多