自动调整QWidget高度

时间:2015-07-09 20:42:08

标签: python qt pyqt

我想知道如何在编辑包含此小部件的QDialog的高度时创建一个自动适合空间的小部件。

在下面的示例中,QPushButton将适合QDialog的宽度,但不适合高度。但是,如果我创建一个QTextEdit而不是QPushButton,QTextEdit将完全适合QDialog。

from PySide.QtGui  import *

class c (QDialog):
    def __init__(self):
        QDialog.__init__(self)

        self.setLayout(QVBoxLayout())
        self.layout().setSpacing (0)
        self.layout().setContentsMargins(0,0,0,0); 

        btn = QPushButton()
        self.layout().addWidget(btn)

        self.exec_()

a = c()

2 个答案:

答案 0 :(得分:1)

您需要将尺寸政策设定为展开。 我不知道python中的语法,但你可以很容易地从C ++中翻译。

QPushButton* button = new QPushButton(this);
button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

答案 1 :(得分:1)

The C++ documentation of the QBoxLayout Class陈述

QBoxLayout::addWidget(widget, stretch=0, alignment=0)
  

如果伸展因子为0且QBoxLayout中没有其他内容的拉伸系数大于零,则根据所涉及的每个窗口小部件的QWidget:sizePolicy()分配空间。

请查看QPushButton

的默认Policy
>>> btn = QPushButton()
>>> btn.sizePolicy().horizontalPolicy()
1
>>> btn.sizePolicy().verticalPolicy()
0

我们会发现,垂直政策是固定的。添加按钮

[...]

    btn = QPushButton()
    policy = btn.sizePolicy().horizontalPolicy()
    btn.setSizePolicy(policy, policy)
    self.layout().addWidget(btn)

[...]

现在会自动调整您的对话框按钮。