2012-11-16 17 views
8

Sono confuso perché un widget QPlainTextEdit non verrà ridimensionato verticalmente se aggiunto a un QFormLayout . Nel codice sottostante il campo di testo viene ridimensionato correttamente in orizzontale, ma non si scala verticalmente.Qt modulo non espandibile qplaintextedit verticalmente

Qualcuno può spiegare questo comportamento e offrire una soluzione? Ho provato tutti i trucchi che conosco inutilmente.

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_() 

Ecco un esempio del widget QPlainTextEdit non il ridimensionamento verticale: QPlainTextEdit added to QFormLayout but not resizing vertically http://s9.postimage.org/ejvmp1wtr/qplaintextedit_in_qformlayout_not_resize.jpg

Questo è il Windows 7 utilizzando PyQt 4.5.2 e Python 2.6 a 32 bit.

Grazie.

+0

ottengo il comportamento opposto esatto sia su Linux e WinXP. La modifica del testo viene ridimensionata verticalmente per riempire lo spazio indipendentemente dalle impostazioni scelte (ad esempio [setFieldGrowthPolicy()] (http://doc.qt.nokia.com/4.8-snapshot/qformlayout.html#fieldGrowthPolicy-prop), [ expandingDirections()] (http://doc.qt.nokia.com/4.8-snapshot/qlayoutitem.html#expandingDirections), ecc.) – ekhumoro

+0

Huh, quale versione di Qt stai usando ekhumoro? Ho aggiunto un'immagine di esempio al mio post che mostra il risultato che ottengo dal mio codice, e solo per essere sicuro di capire che stai dicendo che vedi il campo che si espande per riempire il widget? –

+0

Una foto vale più di mille parole! Sembra che non ho capito bene il tuo problema correttamente. Si prega di vedere la mia soluzione qui sotto. – ekhumoro

risposta

12

Sembra che, per impostazione predefinita, un QFormLayout ridimensioni solo l'altezza dei suoi campi in base al loro sizeHint.

Per modificare questo comportamento, regolare il vertical stretch a seconda dei casi:

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

Perfetto! E ho imparato una cosa nuova su sizePolicy, grazie. –