Qt formlayout не расширяется qplaintextedit по вертикали

Я запутался, почему виджет QPlainTextEdit не будет изменять размеры по вертикали при добавлении в QFormLayout. В приведенном ниже коде текстовое поле правильно масштабируется по горизонтали, но не по вертикали.

Кто-нибудь может объяснить это поведение и предложить решение? Я перепробовал все известные мне уловки, но безрезультатно.

from PyQt4 import QtGui

class Diag(QtGui.QDialog):

    def __init__(self, parent, *args, **kwargs):
        QtGui.QDialog.__init__(self, parent)
        layout = QtGui.QFormLayout(self)
        widg = QtGui.QPlainTextEdit(self)
        layout.addRow('Entry', widg)

if __name__ == '__main__': #pragma: no cover
    app = QtGui.QApplication([])
    window = Diag(None)
    window.show()
    app.exec_()

Вот пример, когда виджет QPlainTextEdit не изменяет размеры по вертикали: http://s9.postimage.org/ejvmp1wtr/qplaintextedit_in_qformlayout_not_resize.jpg

Это на Windows 7 с использованием PyQt 4.5.2 и Python 32-bit 2.6.

Благодарю.

3 ответа

Решение

Кажется, что по умолчанию QFormLayout только изменит высоту своих полей в соответствии с их sizeHint,

Чтобы изменить это поведение, отрегулируйте вертикальное растяжение соответствующим образом:

policy = widg.sizePolicy()
policy.setVerticalStretch(1)
widg.setSizePolicy(policy)

Это работает для меня: он мал во время расчета начального размера виджета диалога и может расти вместе с диалогом, когда он уже виден

      class q2text(QTextEdit):
    def showEvent(self, ev):
        self.updateGeometry()
        return super().showEvent(ev)

    def sizeHint(self):
        if self.isVisible():
            return QSize(99999, 99999)
        else:
            return super().sizeHint()

Вы должны установить объект в последней строке formlayout (см. QPlainTextEdit), его вертикальный коэффициент растяжения не должен быть равен 0.

Другие вопросы по тегам