2010-02-22 10 views
6

Ich habe ein QLabel und ein QLineEdit in einem QWidget. Wenn ich das Widget in einer QScrollArea habe, wird die Linienbearbeitung nicht erweitert, um die überschüssige Breite des Fensters zu belegen. Wenn sich das Widget nicht im Bildlaufbereich befindet, wird es erweitert.Wie man QLineEdit in QScrollArea erweitern kann

Ich habe versucht, die Größenrichtlinie der Zeile bearbeiten und das Widget, horizontal zu erweitern, aber es belegt nicht den überschüssigen Speicherplatz. Ich vermute, dass das sizeHint() des Widgets in einem Bildlaufbereich komprimiert ist. Irgendwelche Ideen, wie das funktioniert?

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) 

Antwort

7

Ich glaube, ich habe Ihr Problem gelöst.

Machen Sie die folgende Ergänzung zu Ihrem Code und es sollte richtig verhalten:

... 

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

    ... 

Vom docs,

widgetResizable: bool

Diese Eigenschaft enthält, ob die Scroll-Bereich sollte die Größe des Ansichts-Widgets ändern.

Wenn diese Eigenschaft auf true festgelegt ist, ändert der Bildlaufbereich die Größe des Widgets automatisch, um Bildlaufleisten zu vermeiden, an denen sie vermieden werden können, oder um zusätzlichen Platz zu nutzen.

+0

Perfekt! Vielen Dank! – Graeme