2017-09-21 51 views
0

Quelqu'un peut-il m'aider à comprendre comment combiner les dispositions? Prenant décalés par rapport aux guides de: [https://pythonspot.com/en/pyqt5/]PyQT5: disposition de la grille dans la disposition horizontale

Je préfère ne pas utiliser Designer comme la mise en page va être une partie de plusieurs onglets qui est déterminée en fonction de la quantité de tests et des ensembles de données à partir d'un dossier de données spécifié.

Par exemple, je voudrais passer le bouton bleu dans:

import sys 
    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QGroupBox, QDialog, QVBoxLayout 
    from PyQt5.QtGui import QIcon 
    from PyQt5.QtCore import pyqtSlot 

    class App(QDialog): 

     def __init__(self): 
      super().__init__() 
      self.title = 'PyQt5 layout - pythonspot.com' 
      self.left = 10 
      self.top = 10 
      self.width = 320 
      self.height = 100 
      self.initUI() 

     def initUI(self): 
      self.setWindowTitle(self.title) 
      self.setGeometry(self.left, self.top, self.width, self.height) 

      self.createHorizontalLayout() 

      windowLayout = QVBoxLayout() 
      windowLayout.addWidget(self.horizontalGroupBox) 
      self.setLayout(windowLayout) 

      self.show() 

     def createHorizontalLayout(self): 
      self.horizontalGroupBox = QGroupBox("What is your favorite color?") 
      layout = QHBoxLayout() 

      buttonBlue = QPushButton('Blue', self) 
      buttonBlue.clicked.connect(self.on_click) 
      layout.addWidget(buttonBlue) 

      buttonRed = QPushButton('Red', self) 
      buttonRed.clicked.connect(self.on_click) 
      layout.addWidget(buttonRed) 

      buttonGreen = QPushButton('Green', self) 
      buttonGreen.clicked.connect(self.on_click) 
      layout.addWidget(buttonGreen) 

      self.horizontalGroupBox.setLayout(layout) 


     @pyqtSlot() 
     def on_click(self): 
      print('PyQt5 button click') 

    if __name__ == '__main__': 
     app = QApplication(sys.argv) 
     ex = App() 
     sys.exit(app.exec_()) 

avec la présentation de la grille de:

import sys 
    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QGroupBox, QDialog, QVBoxLayout, QGridLayout 
    from PyQt5.QtGui import QIcon 
    from PyQt5.QtCore import pyqtSlot 

    class App(QDialog): 

     def __init__(self): 
      super().__init__() 
      self.title = 'PyQt5 layout - pythonspot.com' 
      self.left = 10 
      self.top = 10 
      self.width = 320 
      self.height = 100 
      self.initUI() 

     def initUI(self): 
      self.setWindowTitle(self.title) 
      self.setGeometry(self.left, self.top, self.width, self.height) 

      self.createGridLayout() 

      windowLayout = QVBoxLayout() 
      windowLayout.addWidget(self.horizontalGroupBox) 
      self.setLayout(windowLayout) 

      self.show() 

     def createGridLayout(self): 
    self.horizontalGroupBox = QGroupBox("Grid") 
    layout = QGridLayout() 
    layout.setColumnStretch(1, 4) 
    layout.setColumnStretch(2, 4) 

    layout.addWidget(QPushButton('1'),0,0) 
    layout.addWidget(QPushButton('2'),0,1) 
    layout.addWidget(QPushButton('3'),0,2) 
    layout.addWidget(QPushButton('4'),1,0) 
    layout.addWidget(QPushButton('5'),1,1) 
    layout.addWidget(QPushButton('6'),1,2) 
    layout.addWidget(QPushButton('7'),2,0) 
    layout.addWidget(QPushButton('8'),2,1) 
    layout.addWidget(QPushButton('9'),2,2) 

    self.horizontalGroupBox.setLayout(layout) 

    if __name__ == '__main__': 
     app = QApplication(sys.argv) 
     ex = App() 
     sys.exit(app.exec_())   
+0

S'il vous plaît partager votre code ici !!!! –

+0

Avez-vous installé "Qt Designer"? Là, il est très facile de simplement faire glisser et déposer des composants et former des mises en page tabulaires, verticales ou horizontales. – nostradamus

Répondre

0

Vous pouvez ajouter une mise en page en tant qu'élément d'une autre mise en page un mode similaire à l'ajout d'un widget en utilisant addLayout()

layout = QtWidgets.QHBoxLayout() 
sublayout = QtWidgets.QGridLayout() 
layout.addLayout(sublayout)