python Qt: полоса прокрутки основного виджета - PullRequest
2 голосов
/ 25 января 2010

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

Вот код для основного виджета с полосой прокрутки ..

def centralWDG(self,MainWindow):
    self.centralwidget = QtGui.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")

    self.summaryBox = QtGui.QGroupBox("Project Management Layout")
    self.summaryBox.setMinimumHeight(300)
    self.summaryBox.setMinimumWidth(500)

    self.summaryBoxScroll = QtGui.QScrollArea()
    self.summaryBoxScroll.setFrameStyle(QtGui.QFrame.NoFrame)

    self.summaryBoxTopLayout = QtGui.QVBoxLayout(self.summaryBox)
    self.summaryBoxTopLayout.setContentsMargins(1,1,1,1)
    self.summaryBoxTopLayout.addWidget(self.summaryBoxScroll) 

    self.summaryBoxScroll.setWidget(self.centralwidget)

    self.summaryBoxLayout = QtGui.QFormLayout()
    self.summaryBoxLayout.setSpacing(1)
    self.summaryBoxLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize)

    self.summaryBoxLayout = QtGui.QFormLayout(self.centralwidget)
    self.summaryBoxLayout.setSpacing(1)
    self.summaryBoxLayout.setSizeConstraint(QtGui.QLayout.SetMinAndMaxSize)

    self.callchildGUIs()

    MainWindow.setCentralWidget(self.centralwidget)

Система запущена, все графические интерфейсы работают хорошо, но полоса прокрутки не отображается, не имеет значения, если мы изменим размеры окна до очень маленького размера. Итак, чего здесь не хватает?

Все комментарии и предложения высоко ценятся.

Ответы [ 2 ]

3 голосов
/ 25 января 2010

Вы используете centralWidget (то есть QWidget) в качестве центрального виджета главного окна, область прокрутки никогда не добавляется в окно. Содержать его в центральном виджете недостаточно.

Следующий код был сгенерирован pyuic:

def setupUi(self, MainWindow):
    self.centralwidget = QtGui.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")

    self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
    self.verticalLayout.setObjectName("verticalLayout")

    self.scrollArea = QtGui.QScrollArea(self.centralwidget)
    self.scrollArea.setWidgetResizable(True)
    self.scrollArea.setObjectName("scrollArea")
    self.scrollArea.setWidget(self.scrollAreaWidgetContents)
    self.verticalLayout.addWidget(self.scrollArea)

    self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea)
    self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 778, 527))
    self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")

    self.verticalLayout_2 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents)
    self.verticalLayout_2.setObjectName("verticalLayout_2")

    MainWindow.setCentralWidget(self.centralwidget)

Область прокрутки добавляется в макет центрального виджета и имеет собственный виджет контента. Если вы добавите элементы управления к verticalLayout_2scrollAreaWidgetContents в качестве родительского виджета), они получат полосы прокрутки.

1 голос
/ 26 января 2010

Я добавил несколько предложений, которые вы мне отправили. спасибо.

Чтобы использовать self.scrollArea.setWidget (self.scrollAreaWidgetContents), scrollAreaWidgetContents должен быть объявлен первым. Вот обновленный код - все делает хорошо:

def centralWDG(self,MainWindow):
    self.centralwidget = QtGui.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")

    self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
    self.verticalLayout.setObjectName("verticalLayout")

    self.scrollArea = QtGui.QScrollArea()
    self.scrollArea.setWidgetResizable(False)
    self.scrollArea.setObjectName("scrollArea")
    self.scrollArea.setMinimumHeight(400)
    self.scrollArea.setMinimumWidth(400)
    self.scrollArea.setMaximumHeight(1200)
    self.scrollArea.setMaximumWidth(1200)

    self.verticalLayout.addWidget(self.scrollArea)

    self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea)
    self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 1400, 1200))
    self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")

    self.callchildGUIs(self.scrollAreaWidgetContents)

    self.scrollArea.setWidget(self.scrollAreaWidgetContents)
    self.verticalLayout_2 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents)
    self.verticalLayout_2.setObjectName("verticalLayout_2")

    MainWindow.setCentralWidget(self.centralwidget)

Теперь все отлично работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...