Wie machen QLineEdit innerhalb QScrollArea erweitern
Frage
Ich habe ein QLabel und ein QLineEdit in einem QWidget. Als ich das Widget in einem QScrollArea haben, wird die Linie bearbeiten nicht erweitern, um die überschüssige Breite des Fensters zu besetzen. Wenn das Widget nicht im Scroll-Bereich ist, ist es zu erweitern.
Ich habe versucht, die Größe Politik der Linie bearbeitet Einstellung und das Widget, horizontal zu erweitern, aber es nicht besetzt den überschüssigen Raum. Ich vermute, die sizeHint () des Widgets wird verdichtet, wenn in einem Scroll-Bereich. Irgendwelche Ideen, wie diese Arbeit machen?
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)
Lösung
Ich glaube, ich Ihr Problem gelöst haben.
Nehmen Sie die folgende Ergänzung zu Ihrem Code und es sollte richtig verhalten:
...
scrollArea.setWidget(scrollWidget)
scrollArea.setWidgetResizable(True) #add this
self.setCentralWidget(scrollArea)
...
Von der docs ,
widgetResizable: bool
Diese Eigenschaft enthält, ob der Scroll-Bereich die Ansicht Widget Größe ändern sollte.
Wenn diese Eigenschaft auf true gesetzt ist, wird der Scroll-Bereich auf das Widget, um zu vermeiden, Bildlaufleisten automatisch die Größe, wo sie vermieden werden können, oder nutzen Sie zusätzlichen Platz zu nehmen.