似乎大多数人都在问如何让他们的QMainWindow
调整其内容 - 我有相反的问题,我的MainWindow 调整大小,我不知道为什么。
当我将QLabel
设置为较长的文本时,我的主窗口突然变大,我无法找到原因。
以下示例代码基本上包含:
QMainWindow
QWidget
为中心窗口小部件
QVBoxLayout
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_()
答案 0 :(得分:3)
主窗口增长,因为它是使用布局的目标。布局对其小部件的大小要求,以确保正确显示所有内容。要求取决于子小部件。例如,QLabel
默认情况下水平增长,并且需要空间来适应其内容。有许多方法可以防止窗口增长,并且产生的行为会有所不同:
QLabel
放入QScrollArea
。当标签的文字太长时,会出现滚动条。self.lbl2.setWordWrap(True)
启用自动换行。只要您使用一些空格设置文本,QLabel
将以多行显示,窗口将垂直增长而不是水平增长。QLabel
忽略self.lbl2.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Fixed)
的尺寸提示。 QLabel
的内容不会影响其布局或父窗口小部件大小。太大的文本将被截断。