2017-09-28 4 views
0

Je veux mettre une boîte de groupe, qui contient beaucoup de cases à cocher et de boutons, dans un GridLayout dans PyQt4. De plus, je veux avoir un bouton en dehors du groupe (mais dans la même disposition) qui peut exécuter certaines fonctions en cliquant dessus une fois la ou les case (s) cochée (s) dans la case.Comment mettre un GroupBox dans un GridLayout? PyQt4

En outre, je voudrais avoir une barre de défilement (peut-être un QScrollArea ferait?) À la boîte de groupe en raison de je pourrais ajouter plus de boutons à l'avenir. Une chose à noter est qu'il y a plusieurs onglets dans cette disposition/fenêtre (je ne suis pas sûr du terme). Et tout le groupbox/bouton/etc devrait tout dans l'onglet 1.

J'ai lu quelques articles qui ont les mêmes situations, mais aucun d'entre eux fournissent une réponse appropriée ... Si quelqu'un sait comment résoudre le problème , pls faites le moi savoir. Apprécié!

EDIT: Mes codes sont comme ci-dessous. Comme vous pouvez le voir, j'ai une boîte de groupe en bas. Ce que je veux faire est de mettre la boîte de groupe sur le dessus avec toutes les cases à cocher/boutons, sauf un bouton Exécuter en bas à l'extérieur de la boîte de groupe. Et ceux-ci devraient tous se produire que dans l'onglet 1.

import PyQt4 

from PyQt4 import QtGui, QtCore 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

import os, sys 

class Page1 (QTabWidget): 

    def __init__(self, parent=None): 
     super(Page1, self).__init__(parent) 

     self.tab1 = QWidget() 
     self.tab2 = QWidget() 
     self.tab3 = QWidget() 
     self.addTab(self.tab1, "Tab1") 
     self.addTab(self.tab2, "Tab2") 
     self.addTab(self.tab3, "Tab3") 
     self.tab1_initUI() 
     self.tab2_initUI() 
     self.tab3_initUI() 

    def tab1_initUI(self): 

     btn1a = QPushButton('A1') 
     btn1a.resize(btn1a.sizeHint()) 
     btn1b = QPushButton('A2') 
     btn1b.resize(btn1b.sizeHint()) 

     btn2a = QPushButton('B1') 
     btn2a.resize(btn2a.sizeHint()) 
     btn2b = QPushButton('B2') 
     btn2b.resize(btn2b.sizeHint()) 

     btn3a = QPushButton('C1') 
     btn3a.resize(btn3a.sizeHint()) 
     btn3b = QPushButton('C2') 
     btn3b.resize(btn3b.sizeHint()) 

     btn4a = QPushButton('D1', self) 
     btn4a.resize(btn4a.sizeHint()) 
     btn4b =QPushButton('D2', self) 
     btn4b.resize(btn4b.sizeHint()) 

     btn5a = QPushButton('E1', self) 
     btn5a.resize(btn5a.sizeHint())  
     btn5b = QPushButton('E2', self) 
     btn5b.resize(btn5b.sizeHint()) 

     self.checkBox1 = QtGui.QCheckBox('1', self) 
     self.checkBox2 = QtGui.QCheckBox('2', self) 
     self.checkBox3 = QtGui.QCheckBox('3', self) 
     self.checkBox4 = QtGui.QCheckBox('4', self) 
     self.checkBox5 = QtGui.QCheckBox('5', self) 

     btnRun = QPushButton('Run', self) 
     btnRun.resize(btnRun.sizeHint()) 

     grid = QtGui.QGridLayout() 

     grid.addWidget(self.checkBox1, 1, 0) 
     grid.addWidget(btn1a, 1, 1) 
     grid.addWidget(btn1b, 1, 2) 
     grid.addWidget(self.checkBox2, 2, 0) 
     grid.addWidget(btn2a, 2, 1) 
     grid.addWidget(btn2b, 2, 2) 
     grid.addWidget(self.checkBox3, 3, 0) 
     grid.addWidget(btn3a, 3, 1) 
     grid.addWidget(btn3b, 3, 2) 
     grid.addWidget(self.checkBox4, 4, 0) 
     grid.addWidget(btn4a, 4, 1) 
     grid.addWidget(btn4b, 4, 2) 
     grid.addWidget(self.checkBox5, 5, 0) 
     grid.addWidget(btn5a, 5, 1) 
     grid.addWidget(btn5b, 5, 2) 
     grid.addWidget(btnRun, 6, 0, 1, 3) 

     groupbox = QtGui.QGroupBox(self) 

     hbox = QtGui.QHBoxLayout() 
     grid2= QtGui.QGridLayout() 
     hbox.addLayout(grid2) 


     groupbox.setLayout(hbox) 

     scroll = QtGui.QScrollArea() 
     scroll.setWidget(groupbox) 
     scroll.setWidgetResizable(True) 

     grid.addWidget(groupbox,7,0,1,3) 
     self.tab1.setLayout(grid) 

    def tab2_initUI(self): 
     grid = QtGui.QGridLayout() 
     self.tab2.setLayout(grid) 

    def tab3_initUI(self): 
     grid = QtGui.QGridLayout() 
     self.tab3.setLayout(grid) 

class MainWindow(QMainWindow): 

    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 

     self.setGeometry(300, 200, 600, 370) 
     self.startPage1() 


    def startPage1(self): 
     x = Page1(self) 
     self.setWindowTitle("Auto Benchmark") 
     self.setCentralWidget(x) 
     self.show() 

def main(): 
    app = QApplication(sys.argv) 

    main = MainWindow() 
    main.show() 

    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

enter image description here

+0

suivant, je ne comprends pas, vous pourriez mieux expliquer ce que vous voulez ou placer une image qui montre ce que vous voulez. – eyllanesc

+0

@eyllanesc Pls voir mon commentaire 'EDIT' ci-dessus – ryan9025

+0

Je pense que je comprends, mais ce serait génial de nous donner une image de ce que vous voulez. : D – eyllanesc

Répondre

0

Il est toujours conseillé de répartir les tâches, dans ce cas, nous allons créer la classe Widget où nous placerons les boutons et cases à cocher.

class Widget(QWidget): 
    def __init__(self, parent=None): 
     QWidget.__init__(self, parent) 
     self.setLayout(QGridLayout()) 
     for i in range(20): 
      letter = chr(ord('a') + i) 
      checkBox = QtGui.QCheckBox('{}'.format(i+1), self) 
      self.layout().addWidget(checkBox, i, 0) 

      btna = QPushButton("{}1".format(letter), self) 
      btnb = QPushButton("{}2".format(letter), self) 

      self.layout().addWidget(btna, i, 1) 
      self.layout().addWidget(btnb, i, 2) 

deuxième est la classe Tab1 qui implémente le widget qui contient le Widget avec le QScrollArea et le bouton d'exécution:

class Tab1(QWidget): 
    def __init__(self, parent=None): 
     QWidget.__init__(self, parent) 
     self.setLayout(QGridLayout()) 

     self.group = Widget(self) 
     scroll = QtGui.QScrollArea(self) 
     scroll.setWidget(self.group) 
     scroll.setWidgetResizable(True) 

     self.layout().addWidget(scroll) 
     self.runBtn = QPushButton("Run", self) 
     self.layout().addWidget(self.runBtn) 

ajouter ensuite le bouton à QTabWidget (vous ne avez plus besoin de la fonction tab1_initUI())

class Page1(QTabWidget): 
    def __init__(self, parent=None): 
     super(Page1, self).__init__(parent) 
     self.tab1 = Tab1() 
     self.tab2 = QWidget() 
     self.tab3 = QWidget() 
     self.addTab(self.tab1, "Tab1") 
     self.addTab(self.tab2, "Tab2") 
     [...] 

Screenshot:

enter image description here

Le code complet est dans le link