Как сделать расширение QLineEdit внутри QScrollArea

У меня есть QLabel и QLineEdit внутри QWidget. Когда у меня есть виджет внутри QScrollArea, редактирование строки не расширяется, чтобы занять лишнюю ширину окна. Когда виджет не находится внутри области прокрутки, он расширяется.

Я попытался установить политику размера редактирования строки и виджета, чтобы развернуть горизонтально, но она не занимает лишнего места. Я подозреваю, что sizeHint() виджета уплотняется, когда внутри области прокрутки. Любые идеи, как это сделать работа?

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)

1 ответов


Я считаю, что решил вашу проблему.

сделайте следующее дополнение к вашему коду, и он должен вести себя правильно:

    ...

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

    ...

С docs,

widgetResizable: bool

это свойство определяет, должна ли область прокрутки изменять размер виджета вида.

Если это свойство имеет значение true, область прокрутки автоматически изменит размер виджета, чтобы избежать полос прокрутки где их можно избежать, или воспользоваться дополнительным пространством.