2010-01-25 3 views
1

Nous essayons de mettre barre de défilement sur le widget principal, donc si l'utilisateur redimensionne la fenêtre principale, la barre de défilement apparaît, et qu'il bouge de haut en bas pour voir les widgets enfants qui est en dehors de la plus petite fenêtre widget, lui permettant de se déplacer à droite et à gauche.python Qt: barre de défilement widget principal

Voici le code pour le widget principal avec la barre de défilement ..

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) 

Le système est démarré, toutes les interfaces graphiques fonctionnent bien, mais la barre de défilement ne se présente pas, il n » Peu importe si nous redimensionnons les fenêtres à très petite taille. Alors, qu'est-ce qui manque ici?

Tous les commentaires et suggestions sont très appréciés.

Répondre

1

Vous utilisez centralWidget (qui est un QWidget) comme widget central de la fenêtre principale, la zone de défilement n'est jamais ajoutée à la fenêtre. L'avoir contient le widget central n'est pas suffisant.

Le code suivant a été généré par 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) 

La zone de défilement est ajoutée à la mise en page du widget central et a son propre widget contenu. Si vous ajoutez des contrôles à verticalLayout_2 (et scrollAreaWidgetContents comme widget parent), ils recevront des barres de défilement.

+0

Merci Torsten! – ThreaderSlash

0

J'ai ajouté quelques-unes des suggestions que vous m'avez envoyées. Merci.

Pour utiliser self.scrollArea.setWidget (self.scrollAreaWidgetContents), scrollAreaWidgetContents doit être déclaré en premier. Voici le code mis à jour - faire tout bien:

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) 

Maintenant, ça fonctionne bien!