2010-02-22 13 views
6

Tengo QLabel y QLineEdit dentro de un QWidget. Cuando tengo el widget dentro de un QScrollArea, la edición de línea no se expande para ocupar el ancho excesivo de la ventana. Cuando el widget no está dentro del área de desplazamiento, sí se expande.Cómo hacer que QLineEdit se expanda dentro de QScrollArea

He intentado establecer la política de tamaño de la línea de edición y el widget, para expandir horizontalmente, pero no ocupa el espacio sobrante. Sospecho que el sizeHint() del widget se compacta cuando está dentro de un área de desplazamiento. ¿Alguna idea de cómo hacer que esto funcione?

class MainWindow(QtGui.QMainWindow): 
def __init__(self): 
    QtGui.QMainWindow.__init__(self, None) 
    self.setWindowTitle('Test Window') 
    self.resize(500, 250) 

    scrollArea = QtGui.QScrollArea() 
    scrollWidget = QtGui.QWidget() 
    scrollWidget.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Maximum) 

    layout = QtGui.QGridLayout(scrollWidget) 
    label = QtGui.QLabel("Name:") 
    layout.addWidget(label, 0, 0) 
    lineEdit = QtGui.QLineEdit("Value") 
    lineEdit.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Maximum) 
    layout.addWidget(lineEdit, 0, 1) 
    scrollWidget.setLayout(layout) 

    scrollArea.setWidget(scrollWidget) 
    self.setCentralWidget(scrollArea) 

Respuesta

7

Creo que he resuelto su problema.

hacer la siguiente adición a su código y debe comportarse correctamente:

... 

    scrollArea.setWidget(scrollWidget) 
    scrollArea.setWidgetResizable(True) #add this 
    self.setCentralWidget(scrollArea) 

    ... 

Desde el docs,

widgetResizable: bool

Esta propiedad se cumple si el área de desplazamiento debería cambiar el tamaño del widget de vista.

Si esta propiedad se establece en true, el área de desplazamiento cambiará automáticamente el tamaño del widget para evitar barras de desplazamiento donde se pueden evitar, o para aprovechar el espacio adicional.

+0

¡Perfecto! ¡Gracias! – Graeme

Cuestiones relacionadas