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.