【问题标题】:Qt: HBoxLayout - stop MainWindow from resizing to contentsQt:HBoxLayout - 停止 MainWindow 调整大小到内容
【发布时间】:2014-02-13 04:57:50
【问题描述】:

似乎大多数人都在问如何让他们的 QMainWindow 调整其内容的大小 - 我有相反的问题,我的 MainWindow 确实调整了大小,但我不知道为什么。

当我将QLabel 设置为更长的文本时,我的主窗口突然变大了,我不知道为什么会这样。

以下示例代码基本包含:

  • 一个QMainWindow
    • QWidget 作为中心小部件
      • QVBoxLayout 作为那个的孩子
        • 里面有一个LabelBar

LabelBar 是一个 QWidget,它又包含:

  • 一个QHBoxLayout
    • 其中有两个QLabels。

一秒钟后,QTimer 将标签设置为更长的文本以说明问题。

PyQt 示例代码:

from PyQt5.QtWidgets import (QApplication, QHBoxLayout, QLabel, QWidget,
                             QMainWindow, QVBoxLayout, QSizePolicy)
from PyQt5.QtCore import QTimer

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        cwidget = QWidget(self)
        self.setCentralWidget(cwidget)
        self.resize(100, 100)

        vbox = QVBoxLayout(cwidget)
        vbox.addWidget(QWidget())
        self.bar = LabelBar(self)
        vbox.addWidget(self.bar)

        timer = QTimer(self)
        timer.timeout.connect(lambda: self.bar.lbl2.setText("a" * 100))
        timer.start(1000)

class LabelBar(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        hbox = QHBoxLayout(self)
        self.lbl1 = QLabel(text="eggs")
        hbox.addWidget(self.lbl1)
        self.lbl2 = QLabel(text="spam")
        hbox.addWidget(self.lbl2)

if __name__ == '__main__':
    app = QApplication([])
    main = MainWindow()
    main.show()
    app.exec_()

【问题讨论】:

    标签: qt resize qmainwindow qlayout qsizepolicy


    【解决方案1】:

    主窗口的增长是因为它是使用布局的目标。布局对其小部件提出尺寸要求,以确保正确显示所有内容。要求取决于子小部件。例如,QLabel 默认情况下会水平增长并需要空间来容纳其内容。有很多方法可以防止窗口增长,并且产生的行为各不相同:

    • 您可以将QLabel 放入QScrollArea。标签文本过长时,会出现滚动条。
    • 您可以使用self.lbl2.setWordWrap(True) 启用自动换行。只要你给文字设置了一些空格,QLabel就会分几行显示,window会垂直增长一点,而不是水平增长。
    • 您可以使用self.lbl2.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Fixed) 忽略QLabel 的大小提示。 QLabel 的内容不会影响其布局或父窗口小部件的大小。太大的文本将被截断。

    【讨论】:

    • 数字 3 是一个很好的提示 - 我仍然希望标签在有空间时调整大小(例如,当另一个标签变小时)。我最终将 LabelBar 的 sizePolicy 设置为忽略,这就是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 2014-02-17
    • 1970-01-01
    相关资源
    最近更新 更多