Как заставить QLineEdit расширяться внутри QScrollArea - PullRequest
7 голосов
/ 22 февраля 2010

У меня есть 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 Ответ

9 голосов
/ 22 февраля 2010

Мне кажется, я решил вашу проблему.

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

    ...

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

    ...

Из документов ,

widgetResizable: bool

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

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

...