gpt4 book ai didi

Qt:HBoxLayout - 停止 MainWindow 调整内容大小

转载 作者:行者123 更新时间:2023-12-05 03:14:59 25 4
gpt4 key购买 nike

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

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

下面的示例代码基本包含:

  • 一个 QMainWindow
    • 一个 QWidget 作为中心部件
      • A QVBoxLayout 作为它的 child
        • 里面有一个 LabelBar

LabelBar 是一个 QWidget,它又包含:

  • 一个 QHBoxLayout
    • 其中有两个 QLabel

一秒钟后,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_()

最佳答案

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

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

关于Qt:HBoxLayout - 停止 MainWindow 调整内容大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21739119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com