QButton layout in QGroupBox for making UI in PyQt5










0















I have QButtons arranged as first row has four buttons and second row has five buttons.
My code is developed using PyQt5 in Python2.7.



from PyQt5 import QtCore, QtGui, QtWidgets
import cv2
import time
import face_recognition.api as face_recognition

class Thread(QtCore.QThread):
changePixmap = QtCore.pyqtSignal(QtGui.QImage)
scaled_size = QtCore.QSize(640, 480)

def run(self):
cap = cv2.VideoCapture(1)
cap.set(3,1280);
cap.set(4,1024);
time.sleep(2)
while True:
ret, frame = cap.read()
if ret:
r=1
face_locations=
rescaleSize=480
if(frame.shape[0] > 480 and frame.shape[1] > 640):
r = rescaleSize / float(frame.shape[0])
dim = (int(frame.shape[1] * r), rescaleSize)
face_locations = face_recognition.face_locations(cv2.resize(frame, dim, fx=0.0, fy=0.0))
else:
face_locations = face_recognition.face_locations(frame)
for face_location in face_locations:
top, right, bottom, left = face_location
cv2.rectangle(frame,(int(right/r),int(top/r)),(int(left/r),int(bottom/r)),(0,255,0),2)
rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
convertToQtFormat = QtGui.QImage(rgbImage.data, rgbImage.shape[1], rgbImage.shape[0], QtGui.QImage.Format_RGB888)
p = convertToQtFormat.scaled(self.scaled_size, QtCore.Qt.KeepAspectRatio)
self.changePixmap.emit(p)

def scaled(self, scaled_size):
self.scaled_size = scaled_size


class PlayStreaming(QtWidgets.QLabel):
reSize = QtCore.pyqtSignal(QtCore.QSize)
def __init__(self):
super(PlayStreaming, self).__init__()
self.initUI()

@QtCore.pyqtSlot(QtGui.QImage)
def setImage(self, image):
self.label.setPixmap(QtGui.QPixmap.fromImage(image))

def initUI(self):
self.setWindowTitle("Image")
# create a label
self.label = QtWidgets.QLabel(self)
th = Thread(self)
th.changePixmap.connect(self.setImage)
self.reSize.connect(th.scaled)
th.start()
lay = QtWidgets.QVBoxLayout(self)
lay.addWidget(self.label, alignment=QtCore.Qt.AlignCenter)

def resizeEvent(self, event):
self.reSize.emit(self.size())


class UIWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(UIWidget, self).__init__(parent)
# Initialize tab screen
self.tabs = QtWidgets.QTabWidget()
self.tab1 = QtWidgets.QWidget()
self.tab2 = QtWidgets.QWidget()
self.tab3 = QtWidgets.QWidget()

# Add tabs
self.tabs.addTab(self.tab1, "Face")
self.tabs.addTab(self.tab2, "Human")
self.tabs.addTab(self.tab3, "Vehicle")

# Create first tab
self.createGridLayout()
self.tab1.layout = QtWidgets.QVBoxLayout()
self.display = PlayStreaming()
self.tab1.layout.addWidget(self.display, stretch=1)
self.tab1.layout.addWidget(self.horizontalGroupBox)
self.tab1.setLayout(self.tab1.layout)

# Add tabs to widget
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.tabs)

def createGridLayout(self):
self.horizontalGroupBox = QtWidgets.QGroupBox("")
self.horizontalGroupBox.setStyleSheet("QGroupBox background-color: red; border: none;")
layout = QtWidgets.QGridLayout()
layout.addWidget(QtWidgets.QPushButton('Test'),0,0)
layout.addWidget(QtWidgets.QPushButton('Run'),0,1)
layout.addWidget(QtWidgets.QPushButton('RescaleUp'),0,2)
layout.addWidget(QtWidgets.QPushButton('RescaleDown'),0,3)
layout.addWidget(QtWidgets.QPushButton('Set Faces'),1,0)
layout.addWidget(QtWidgets.QPushButton('FacePose'),1,1)
layout.addWidget(QtWidgets.QPushButton('Gender'),1,2)
layout.addWidget(QtWidgets.QPushButton('Age'),1,3)
layout.addWidget(QtWidgets.QPushButton('Recognize'),1,4)
self.horizontalGroupBox.setLayout(layout)



if __name__ == '__main__':
import sys

app = QtWidgets.QApplication(sys.argv)
w = UIWidget()
w.resize(1000, 800)
w.show()
sys.exit(app.exec_())


enter image description here



I like to make the first four buttons are equally spaced and the second fuve buttons are also equally spaced.
For that, changes are made as



class UIWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(UIWidget, self).__init__(parent)
# Initialize tab screen
self.tabs = QtWidgets.QTabWidget()
self.tab1 = QtWidgets.QWidget()
self.tab2 = QtWidgets.QWidget()
self.tab3 = QtWidgets.QWidget()

# Add tabs
self.tabs.addTab(self.tab1, "Face")
self.tabs.addTab(self.tab2, "Human")
self.tabs.addTab(self.tab3, "Vehicle")

# Create first tab
self.createGridLayout()
self.tab1.layout = QtWidgets.QVBoxLayout()
self.display = PlayStreaming()
self.tab1.layout.addWidget(self.display, stretch=1)
self.tab1.layout.addWidget(self.horizontalGroupBox)
self.tab1.layout.addWidget(self.horizontalGroupBox2)
self.tab1.setLayout(self.tab1.layout)

# Add tabs to widget
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.tabs)

def createGridLayout(self):
self.horizontalGroupBox = QtWidgets.QGroupBox("")
self.horizontalGroupBox.setStyleSheet("QGroupBox background-color: red; border: none;")
layout = QtWidgets.QGridLayout()
layout.addWidget(QtWidgets.QPushButton('Test'),0,0)
layout.addWidget(QtWidgets.QPushButton('Run'),0,1)
layout.addWidget(QtWidgets.QPushButton('RescaleUp'),0,2)
layout.addWidget(QtWidgets.QPushButton('RescaleDown'),0,3)
self.horizontalGroupBox.setLayout(layout)
self.horizontalGroupBox2 = QtWidgets.QGroupBox("")
self.horizontalGroupBox2.setStyleSheet("QGroupBox background-color: red; border: none;")
layout = QtWidgets.QGridLayout()
layout.addWidget(QtWidgets.QPushButton('Set Faces'),0,0)
layout.addWidget(QtWidgets.QPushButton('FacePose'),0,1)
layout.addWidget(QtWidgets.QPushButton('Gender'),0,2)
layout.addWidget(QtWidgets.QPushButton('Age'),0,3)
layout.addWidget(QtWidgets.QPushButton('Recognize'),0,4)
self.horizontalGroupBox2.setLayout(layout)


Then there is a gap in between two QGroupBoxes.



enter image description here



How can I make so that there is no gap and first row and second row have equally spaced buttons?










share|improve this question




























    0















    I have QButtons arranged as first row has four buttons and second row has five buttons.
    My code is developed using PyQt5 in Python2.7.



    from PyQt5 import QtCore, QtGui, QtWidgets
    import cv2
    import time
    import face_recognition.api as face_recognition

    class Thread(QtCore.QThread):
    changePixmap = QtCore.pyqtSignal(QtGui.QImage)
    scaled_size = QtCore.QSize(640, 480)

    def run(self):
    cap = cv2.VideoCapture(1)
    cap.set(3,1280);
    cap.set(4,1024);
    time.sleep(2)
    while True:
    ret, frame = cap.read()
    if ret:
    r=1
    face_locations=
    rescaleSize=480
    if(frame.shape[0] > 480 and frame.shape[1] > 640):
    r = rescaleSize / float(frame.shape[0])
    dim = (int(frame.shape[1] * r), rescaleSize)
    face_locations = face_recognition.face_locations(cv2.resize(frame, dim, fx=0.0, fy=0.0))
    else:
    face_locations = face_recognition.face_locations(frame)
    for face_location in face_locations:
    top, right, bottom, left = face_location
    cv2.rectangle(frame,(int(right/r),int(top/r)),(int(left/r),int(bottom/r)),(0,255,0),2)
    rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    convertToQtFormat = QtGui.QImage(rgbImage.data, rgbImage.shape[1], rgbImage.shape[0], QtGui.QImage.Format_RGB888)
    p = convertToQtFormat.scaled(self.scaled_size, QtCore.Qt.KeepAspectRatio)
    self.changePixmap.emit(p)

    def scaled(self, scaled_size):
    self.scaled_size = scaled_size


    class PlayStreaming(QtWidgets.QLabel):
    reSize = QtCore.pyqtSignal(QtCore.QSize)
    def __init__(self):
    super(PlayStreaming, self).__init__()
    self.initUI()

    @QtCore.pyqtSlot(QtGui.QImage)
    def setImage(self, image):
    self.label.setPixmap(QtGui.QPixmap.fromImage(image))

    def initUI(self):
    self.setWindowTitle("Image")
    # create a label
    self.label = QtWidgets.QLabel(self)
    th = Thread(self)
    th.changePixmap.connect(self.setImage)
    self.reSize.connect(th.scaled)
    th.start()
    lay = QtWidgets.QVBoxLayout(self)
    lay.addWidget(self.label, alignment=QtCore.Qt.AlignCenter)

    def resizeEvent(self, event):
    self.reSize.emit(self.size())


    class UIWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
    super(UIWidget, self).__init__(parent)
    # Initialize tab screen
    self.tabs = QtWidgets.QTabWidget()
    self.tab1 = QtWidgets.QWidget()
    self.tab2 = QtWidgets.QWidget()
    self.tab3 = QtWidgets.QWidget()

    # Add tabs
    self.tabs.addTab(self.tab1, "Face")
    self.tabs.addTab(self.tab2, "Human")
    self.tabs.addTab(self.tab3, "Vehicle")

    # Create first tab
    self.createGridLayout()
    self.tab1.layout = QtWidgets.QVBoxLayout()
    self.display = PlayStreaming()
    self.tab1.layout.addWidget(self.display, stretch=1)
    self.tab1.layout.addWidget(self.horizontalGroupBox)
    self.tab1.setLayout(self.tab1.layout)

    # Add tabs to widget
    layout = QtWidgets.QVBoxLayout(self)
    layout.addWidget(self.tabs)

    def createGridLayout(self):
    self.horizontalGroupBox = QtWidgets.QGroupBox("")
    self.horizontalGroupBox.setStyleSheet("QGroupBox background-color: red; border: none;")
    layout = QtWidgets.QGridLayout()
    layout.addWidget(QtWidgets.QPushButton('Test'),0,0)
    layout.addWidget(QtWidgets.QPushButton('Run'),0,1)
    layout.addWidget(QtWidgets.QPushButton('RescaleUp'),0,2)
    layout.addWidget(QtWidgets.QPushButton('RescaleDown'),0,3)
    layout.addWidget(QtWidgets.QPushButton('Set Faces'),1,0)
    layout.addWidget(QtWidgets.QPushButton('FacePose'),1,1)
    layout.addWidget(QtWidgets.QPushButton('Gender'),1,2)
    layout.addWidget(QtWidgets.QPushButton('Age'),1,3)
    layout.addWidget(QtWidgets.QPushButton('Recognize'),1,4)
    self.horizontalGroupBox.setLayout(layout)



    if __name__ == '__main__':
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = UIWidget()
    w.resize(1000, 800)
    w.show()
    sys.exit(app.exec_())


    enter image description here



    I like to make the first four buttons are equally spaced and the second fuve buttons are also equally spaced.
    For that, changes are made as



    class UIWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
    super(UIWidget, self).__init__(parent)
    # Initialize tab screen
    self.tabs = QtWidgets.QTabWidget()
    self.tab1 = QtWidgets.QWidget()
    self.tab2 = QtWidgets.QWidget()
    self.tab3 = QtWidgets.QWidget()

    # Add tabs
    self.tabs.addTab(self.tab1, "Face")
    self.tabs.addTab(self.tab2, "Human")
    self.tabs.addTab(self.tab3, "Vehicle")

    # Create first tab
    self.createGridLayout()
    self.tab1.layout = QtWidgets.QVBoxLayout()
    self.display = PlayStreaming()
    self.tab1.layout.addWidget(self.display, stretch=1)
    self.tab1.layout.addWidget(self.horizontalGroupBox)
    self.tab1.layout.addWidget(self.horizontalGroupBox2)
    self.tab1.setLayout(self.tab1.layout)

    # Add tabs to widget
    layout = QtWidgets.QVBoxLayout(self)
    layout.addWidget(self.tabs)

    def createGridLayout(self):
    self.horizontalGroupBox = QtWidgets.QGroupBox("")
    self.horizontalGroupBox.setStyleSheet("QGroupBox background-color: red; border: none;")
    layout = QtWidgets.QGridLayout()
    layout.addWidget(QtWidgets.QPushButton('Test'),0,0)
    layout.addWidget(QtWidgets.QPushButton('Run'),0,1)
    layout.addWidget(QtWidgets.QPushButton('RescaleUp'),0,2)
    layout.addWidget(QtWidgets.QPushButton('RescaleDown'),0,3)
    self.horizontalGroupBox.setLayout(layout)
    self.horizontalGroupBox2 = QtWidgets.QGroupBox("")
    self.horizontalGroupBox2.setStyleSheet("QGroupBox background-color: red; border: none;")
    layout = QtWidgets.QGridLayout()
    layout.addWidget(QtWidgets.QPushButton('Set Faces'),0,0)
    layout.addWidget(QtWidgets.QPushButton('FacePose'),0,1)
    layout.addWidget(QtWidgets.QPushButton('Gender'),0,2)
    layout.addWidget(QtWidgets.QPushButton('Age'),0,3)
    layout.addWidget(QtWidgets.QPushButton('Recognize'),0,4)
    self.horizontalGroupBox2.setLayout(layout)


    Then there is a gap in between two QGroupBoxes.



    enter image description here



    How can I make so that there is no gap and first row and second row have equally spaced buttons?










    share|improve this question


























      0












      0








      0








      I have QButtons arranged as first row has four buttons and second row has five buttons.
      My code is developed using PyQt5 in Python2.7.



      from PyQt5 import QtCore, QtGui, QtWidgets
      import cv2
      import time
      import face_recognition.api as face_recognition

      class Thread(QtCore.QThread):
      changePixmap = QtCore.pyqtSignal(QtGui.QImage)
      scaled_size = QtCore.QSize(640, 480)

      def run(self):
      cap = cv2.VideoCapture(1)
      cap.set(3,1280);
      cap.set(4,1024);
      time.sleep(2)
      while True:
      ret, frame = cap.read()
      if ret:
      r=1
      face_locations=
      rescaleSize=480
      if(frame.shape[0] > 480 and frame.shape[1] > 640):
      r = rescaleSize / float(frame.shape[0])
      dim = (int(frame.shape[1] * r), rescaleSize)
      face_locations = face_recognition.face_locations(cv2.resize(frame, dim, fx=0.0, fy=0.0))
      else:
      face_locations = face_recognition.face_locations(frame)
      for face_location in face_locations:
      top, right, bottom, left = face_location
      cv2.rectangle(frame,(int(right/r),int(top/r)),(int(left/r),int(bottom/r)),(0,255,0),2)
      rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
      convertToQtFormat = QtGui.QImage(rgbImage.data, rgbImage.shape[1], rgbImage.shape[0], QtGui.QImage.Format_RGB888)
      p = convertToQtFormat.scaled(self.scaled_size, QtCore.Qt.KeepAspectRatio)
      self.changePixmap.emit(p)

      def scaled(self, scaled_size):
      self.scaled_size = scaled_size


      class PlayStreaming(QtWidgets.QLabel):
      reSize = QtCore.pyqtSignal(QtCore.QSize)
      def __init__(self):
      super(PlayStreaming, self).__init__()
      self.initUI()

      @QtCore.pyqtSlot(QtGui.QImage)
      def setImage(self, image):
      self.label.setPixmap(QtGui.QPixmap.fromImage(image))

      def initUI(self):
      self.setWindowTitle("Image")
      # create a label
      self.label = QtWidgets.QLabel(self)
      th = Thread(self)
      th.changePixmap.connect(self.setImage)
      self.reSize.connect(th.scaled)
      th.start()
      lay = QtWidgets.QVBoxLayout(self)
      lay.addWidget(self.label, alignment=QtCore.Qt.AlignCenter)

      def resizeEvent(self, event):
      self.reSize.emit(self.size())


      class UIWidget(QtWidgets.QWidget):
      def __init__(self, parent=None):
      super(UIWidget, self).__init__(parent)
      # Initialize tab screen
      self.tabs = QtWidgets.QTabWidget()
      self.tab1 = QtWidgets.QWidget()
      self.tab2 = QtWidgets.QWidget()
      self.tab3 = QtWidgets.QWidget()

      # Add tabs
      self.tabs.addTab(self.tab1, "Face")
      self.tabs.addTab(self.tab2, "Human")
      self.tabs.addTab(self.tab3, "Vehicle")

      # Create first tab
      self.createGridLayout()
      self.tab1.layout = QtWidgets.QVBoxLayout()
      self.display = PlayStreaming()
      self.tab1.layout.addWidget(self.display, stretch=1)
      self.tab1.layout.addWidget(self.horizontalGroupBox)
      self.tab1.setLayout(self.tab1.layout)

      # Add tabs to widget
      layout = QtWidgets.QVBoxLayout(self)
      layout.addWidget(self.tabs)

      def createGridLayout(self):
      self.horizontalGroupBox = QtWidgets.QGroupBox("")
      self.horizontalGroupBox.setStyleSheet("QGroupBox background-color: red; border: none;")
      layout = QtWidgets.QGridLayout()
      layout.addWidget(QtWidgets.QPushButton('Test'),0,0)
      layout.addWidget(QtWidgets.QPushButton('Run'),0,1)
      layout.addWidget(QtWidgets.QPushButton('RescaleUp'),0,2)
      layout.addWidget(QtWidgets.QPushButton('RescaleDown'),0,3)
      layout.addWidget(QtWidgets.QPushButton('Set Faces'),1,0)
      layout.addWidget(QtWidgets.QPushButton('FacePose'),1,1)
      layout.addWidget(QtWidgets.QPushButton('Gender'),1,2)
      layout.addWidget(QtWidgets.QPushButton('Age'),1,3)
      layout.addWidget(QtWidgets.QPushButton('Recognize'),1,4)
      self.horizontalGroupBox.setLayout(layout)



      if __name__ == '__main__':
      import sys

      app = QtWidgets.QApplication(sys.argv)
      w = UIWidget()
      w.resize(1000, 800)
      w.show()
      sys.exit(app.exec_())


      enter image description here



      I like to make the first four buttons are equally spaced and the second fuve buttons are also equally spaced.
      For that, changes are made as



      class UIWidget(QtWidgets.QWidget):
      def __init__(self, parent=None):
      super(UIWidget, self).__init__(parent)
      # Initialize tab screen
      self.tabs = QtWidgets.QTabWidget()
      self.tab1 = QtWidgets.QWidget()
      self.tab2 = QtWidgets.QWidget()
      self.tab3 = QtWidgets.QWidget()

      # Add tabs
      self.tabs.addTab(self.tab1, "Face")
      self.tabs.addTab(self.tab2, "Human")
      self.tabs.addTab(self.tab3, "Vehicle")

      # Create first tab
      self.createGridLayout()
      self.tab1.layout = QtWidgets.QVBoxLayout()
      self.display = PlayStreaming()
      self.tab1.layout.addWidget(self.display, stretch=1)
      self.tab1.layout.addWidget(self.horizontalGroupBox)
      self.tab1.layout.addWidget(self.horizontalGroupBox2)
      self.tab1.setLayout(self.tab1.layout)

      # Add tabs to widget
      layout = QtWidgets.QVBoxLayout(self)
      layout.addWidget(self.tabs)

      def createGridLayout(self):
      self.horizontalGroupBox = QtWidgets.QGroupBox("")
      self.horizontalGroupBox.setStyleSheet("QGroupBox background-color: red; border: none;")
      layout = QtWidgets.QGridLayout()
      layout.addWidget(QtWidgets.QPushButton('Test'),0,0)
      layout.addWidget(QtWidgets.QPushButton('Run'),0,1)
      layout.addWidget(QtWidgets.QPushButton('RescaleUp'),0,2)
      layout.addWidget(QtWidgets.QPushButton('RescaleDown'),0,3)
      self.horizontalGroupBox.setLayout(layout)
      self.horizontalGroupBox2 = QtWidgets.QGroupBox("")
      self.horizontalGroupBox2.setStyleSheet("QGroupBox background-color: red; border: none;")
      layout = QtWidgets.QGridLayout()
      layout.addWidget(QtWidgets.QPushButton('Set Faces'),0,0)
      layout.addWidget(QtWidgets.QPushButton('FacePose'),0,1)
      layout.addWidget(QtWidgets.QPushButton('Gender'),0,2)
      layout.addWidget(QtWidgets.QPushButton('Age'),0,3)
      layout.addWidget(QtWidgets.QPushButton('Recognize'),0,4)
      self.horizontalGroupBox2.setLayout(layout)


      Then there is a gap in between two QGroupBoxes.



      enter image description here



      How can I make so that there is no gap and first row and second row have equally spaced buttons?










      share|improve this question
















      I have QButtons arranged as first row has four buttons and second row has five buttons.
      My code is developed using PyQt5 in Python2.7.



      from PyQt5 import QtCore, QtGui, QtWidgets
      import cv2
      import time
      import face_recognition.api as face_recognition

      class Thread(QtCore.QThread):
      changePixmap = QtCore.pyqtSignal(QtGui.QImage)
      scaled_size = QtCore.QSize(640, 480)

      def run(self):
      cap = cv2.VideoCapture(1)
      cap.set(3,1280);
      cap.set(4,1024);
      time.sleep(2)
      while True:
      ret, frame = cap.read()
      if ret:
      r=1
      face_locations=
      rescaleSize=480
      if(frame.shape[0] > 480 and frame.shape[1] > 640):
      r = rescaleSize / float(frame.shape[0])
      dim = (int(frame.shape[1] * r), rescaleSize)
      face_locations = face_recognition.face_locations(cv2.resize(frame, dim, fx=0.0, fy=0.0))
      else:
      face_locations = face_recognition.face_locations(frame)
      for face_location in face_locations:
      top, right, bottom, left = face_location
      cv2.rectangle(frame,(int(right/r),int(top/r)),(int(left/r),int(bottom/r)),(0,255,0),2)
      rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
      convertToQtFormat = QtGui.QImage(rgbImage.data, rgbImage.shape[1], rgbImage.shape[0], QtGui.QImage.Format_RGB888)
      p = convertToQtFormat.scaled(self.scaled_size, QtCore.Qt.KeepAspectRatio)
      self.changePixmap.emit(p)

      def scaled(self, scaled_size):
      self.scaled_size = scaled_size


      class PlayStreaming(QtWidgets.QLabel):
      reSize = QtCore.pyqtSignal(QtCore.QSize)
      def __init__(self):
      super(PlayStreaming, self).__init__()
      self.initUI()

      @QtCore.pyqtSlot(QtGui.QImage)
      def setImage(self, image):
      self.label.setPixmap(QtGui.QPixmap.fromImage(image))

      def initUI(self):
      self.setWindowTitle("Image")
      # create a label
      self.label = QtWidgets.QLabel(self)
      th = Thread(self)
      th.changePixmap.connect(self.setImage)
      self.reSize.connect(th.scaled)
      th.start()
      lay = QtWidgets.QVBoxLayout(self)
      lay.addWidget(self.label, alignment=QtCore.Qt.AlignCenter)

      def resizeEvent(self, event):
      self.reSize.emit(self.size())


      class UIWidget(QtWidgets.QWidget):
      def __init__(self, parent=None):
      super(UIWidget, self).__init__(parent)
      # Initialize tab screen
      self.tabs = QtWidgets.QTabWidget()
      self.tab1 = QtWidgets.QWidget()
      self.tab2 = QtWidgets.QWidget()
      self.tab3 = QtWidgets.QWidget()

      # Add tabs
      self.tabs.addTab(self.tab1, "Face")
      self.tabs.addTab(self.tab2, "Human")
      self.tabs.addTab(self.tab3, "Vehicle")

      # Create first tab
      self.createGridLayout()
      self.tab1.layout = QtWidgets.QVBoxLayout()
      self.display = PlayStreaming()
      self.tab1.layout.addWidget(self.display, stretch=1)
      self.tab1.layout.addWidget(self.horizontalGroupBox)
      self.tab1.setLayout(self.tab1.layout)

      # Add tabs to widget
      layout = QtWidgets.QVBoxLayout(self)
      layout.addWidget(self.tabs)

      def createGridLayout(self):
      self.horizontalGroupBox = QtWidgets.QGroupBox("")
      self.horizontalGroupBox.setStyleSheet("QGroupBox background-color: red; border: none;")
      layout = QtWidgets.QGridLayout()
      layout.addWidget(QtWidgets.QPushButton('Test'),0,0)
      layout.addWidget(QtWidgets.QPushButton('Run'),0,1)
      layout.addWidget(QtWidgets.QPushButton('RescaleUp'),0,2)
      layout.addWidget(QtWidgets.QPushButton('RescaleDown'),0,3)
      layout.addWidget(QtWidgets.QPushButton('Set Faces'),1,0)
      layout.addWidget(QtWidgets.QPushButton('FacePose'),1,1)
      layout.addWidget(QtWidgets.QPushButton('Gender'),1,2)
      layout.addWidget(QtWidgets.QPushButton('Age'),1,3)
      layout.addWidget(QtWidgets.QPushButton('Recognize'),1,4)
      self.horizontalGroupBox.setLayout(layout)



      if __name__ == '__main__':
      import sys

      app = QtWidgets.QApplication(sys.argv)
      w = UIWidget()
      w.resize(1000, 800)
      w.show()
      sys.exit(app.exec_())


      enter image description here



      I like to make the first four buttons are equally spaced and the second fuve buttons are also equally spaced.
      For that, changes are made as



      class UIWidget(QtWidgets.QWidget):
      def __init__(self, parent=None):
      super(UIWidget, self).__init__(parent)
      # Initialize tab screen
      self.tabs = QtWidgets.QTabWidget()
      self.tab1 = QtWidgets.QWidget()
      self.tab2 = QtWidgets.QWidget()
      self.tab3 = QtWidgets.QWidget()

      # Add tabs
      self.tabs.addTab(self.tab1, "Face")
      self.tabs.addTab(self.tab2, "Human")
      self.tabs.addTab(self.tab3, "Vehicle")

      # Create first tab
      self.createGridLayout()
      self.tab1.layout = QtWidgets.QVBoxLayout()
      self.display = PlayStreaming()
      self.tab1.layout.addWidget(self.display, stretch=1)
      self.tab1.layout.addWidget(self.horizontalGroupBox)
      self.tab1.layout.addWidget(self.horizontalGroupBox2)
      self.tab1.setLayout(self.tab1.layout)

      # Add tabs to widget
      layout = QtWidgets.QVBoxLayout(self)
      layout.addWidget(self.tabs)

      def createGridLayout(self):
      self.horizontalGroupBox = QtWidgets.QGroupBox("")
      self.horizontalGroupBox.setStyleSheet("QGroupBox background-color: red; border: none;")
      layout = QtWidgets.QGridLayout()
      layout.addWidget(QtWidgets.QPushButton('Test'),0,0)
      layout.addWidget(QtWidgets.QPushButton('Run'),0,1)
      layout.addWidget(QtWidgets.QPushButton('RescaleUp'),0,2)
      layout.addWidget(QtWidgets.QPushButton('RescaleDown'),0,3)
      self.horizontalGroupBox.setLayout(layout)
      self.horizontalGroupBox2 = QtWidgets.QGroupBox("")
      self.horizontalGroupBox2.setStyleSheet("QGroupBox background-color: red; border: none;")
      layout = QtWidgets.QGridLayout()
      layout.addWidget(QtWidgets.QPushButton('Set Faces'),0,0)
      layout.addWidget(QtWidgets.QPushButton('FacePose'),0,1)
      layout.addWidget(QtWidgets.QPushButton('Gender'),0,2)
      layout.addWidget(QtWidgets.QPushButton('Age'),0,3)
      layout.addWidget(QtWidgets.QPushButton('Recognize'),0,4)
      self.horizontalGroupBox2.setLayout(layout)


      Then there is a gap in between two QGroupBoxes.



      enter image description here



      How can I make so that there is no gap and first row and second row have equally spaced buttons?







      python python-2.7 pyqt pyqt5






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 12 '18 at 12:54









      Vadim Kotov

      4,37953247




      4,37953247










      asked Nov 12 '18 at 12:53









      batumanbatuman

      2,494642101




      2,494642101






















          1 Answer
          1






          active

          oldest

          votes


















          2














          You must use 1 QVBoxLayout next to 2 QHBoxLayouts:



          def createGridLayout(self):
          self.horizontalGroupBox = QtWidgets.QGroupBox("")
          self.horizontalGroupBox.setStyleSheet("QGroupBox background-color: red; border: none;")

          hlay1 = QtWidgets.QHBoxLayout()
          hlay1.addWidget(QtWidgets.QPushButton('Test'))
          hlay1.addWidget(QtWidgets.QPushButton('Run'))
          hlay1.addWidget(QtWidgets.QPushButton('RescaleUp'))
          hlay1.addWidget(QtWidgets.QPushButton('RescaleDown'))

          hlay2 = QtWidgets.QHBoxLayout()
          hlay2.addWidget(QtWidgets.QPushButton('Set Faces'))
          hlay2.addWidget(QtWidgets.QPushButton('FacePose'))
          hlay2.addWidget(QtWidgets.QPushButton('Gender'))
          hlay2.addWidget(QtWidgets.QPushButton('Age'))
          hlay2.addWidget(QtWidgets.QPushButton('Recognize'))

          layout = QtWidgets.QVBoxLayout()
          layout.addLayout(hlay1)
          layout.addLayout(hlay2)
          self.horizontalGroupBox.setLayout(layout)





          share|improve this answer






















            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53262602%2fqbutton-layout-in-qgroupbox-for-making-ui-in-pyqt5%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            2














            You must use 1 QVBoxLayout next to 2 QHBoxLayouts:



            def createGridLayout(self):
            self.horizontalGroupBox = QtWidgets.QGroupBox("")
            self.horizontalGroupBox.setStyleSheet("QGroupBox background-color: red; border: none;")

            hlay1 = QtWidgets.QHBoxLayout()
            hlay1.addWidget(QtWidgets.QPushButton('Test'))
            hlay1.addWidget(QtWidgets.QPushButton('Run'))
            hlay1.addWidget(QtWidgets.QPushButton('RescaleUp'))
            hlay1.addWidget(QtWidgets.QPushButton('RescaleDown'))

            hlay2 = QtWidgets.QHBoxLayout()
            hlay2.addWidget(QtWidgets.QPushButton('Set Faces'))
            hlay2.addWidget(QtWidgets.QPushButton('FacePose'))
            hlay2.addWidget(QtWidgets.QPushButton('Gender'))
            hlay2.addWidget(QtWidgets.QPushButton('Age'))
            hlay2.addWidget(QtWidgets.QPushButton('Recognize'))

            layout = QtWidgets.QVBoxLayout()
            layout.addLayout(hlay1)
            layout.addLayout(hlay2)
            self.horizontalGroupBox.setLayout(layout)





            share|improve this answer



























              2














              You must use 1 QVBoxLayout next to 2 QHBoxLayouts:



              def createGridLayout(self):
              self.horizontalGroupBox = QtWidgets.QGroupBox("")
              self.horizontalGroupBox.setStyleSheet("QGroupBox background-color: red; border: none;")

              hlay1 = QtWidgets.QHBoxLayout()
              hlay1.addWidget(QtWidgets.QPushButton('Test'))
              hlay1.addWidget(QtWidgets.QPushButton('Run'))
              hlay1.addWidget(QtWidgets.QPushButton('RescaleUp'))
              hlay1.addWidget(QtWidgets.QPushButton('RescaleDown'))

              hlay2 = QtWidgets.QHBoxLayout()
              hlay2.addWidget(QtWidgets.QPushButton('Set Faces'))
              hlay2.addWidget(QtWidgets.QPushButton('FacePose'))
              hlay2.addWidget(QtWidgets.QPushButton('Gender'))
              hlay2.addWidget(QtWidgets.QPushButton('Age'))
              hlay2.addWidget(QtWidgets.QPushButton('Recognize'))

              layout = QtWidgets.QVBoxLayout()
              layout.addLayout(hlay1)
              layout.addLayout(hlay2)
              self.horizontalGroupBox.setLayout(layout)





              share|improve this answer

























                2












                2








                2







                You must use 1 QVBoxLayout next to 2 QHBoxLayouts:



                def createGridLayout(self):
                self.horizontalGroupBox = QtWidgets.QGroupBox("")
                self.horizontalGroupBox.setStyleSheet("QGroupBox background-color: red; border: none;")

                hlay1 = QtWidgets.QHBoxLayout()
                hlay1.addWidget(QtWidgets.QPushButton('Test'))
                hlay1.addWidget(QtWidgets.QPushButton('Run'))
                hlay1.addWidget(QtWidgets.QPushButton('RescaleUp'))
                hlay1.addWidget(QtWidgets.QPushButton('RescaleDown'))

                hlay2 = QtWidgets.QHBoxLayout()
                hlay2.addWidget(QtWidgets.QPushButton('Set Faces'))
                hlay2.addWidget(QtWidgets.QPushButton('FacePose'))
                hlay2.addWidget(QtWidgets.QPushButton('Gender'))
                hlay2.addWidget(QtWidgets.QPushButton('Age'))
                hlay2.addWidget(QtWidgets.QPushButton('Recognize'))

                layout = QtWidgets.QVBoxLayout()
                layout.addLayout(hlay1)
                layout.addLayout(hlay2)
                self.horizontalGroupBox.setLayout(layout)





                share|improve this answer













                You must use 1 QVBoxLayout next to 2 QHBoxLayouts:



                def createGridLayout(self):
                self.horizontalGroupBox = QtWidgets.QGroupBox("")
                self.horizontalGroupBox.setStyleSheet("QGroupBox background-color: red; border: none;")

                hlay1 = QtWidgets.QHBoxLayout()
                hlay1.addWidget(QtWidgets.QPushButton('Test'))
                hlay1.addWidget(QtWidgets.QPushButton('Run'))
                hlay1.addWidget(QtWidgets.QPushButton('RescaleUp'))
                hlay1.addWidget(QtWidgets.QPushButton('RescaleDown'))

                hlay2 = QtWidgets.QHBoxLayout()
                hlay2.addWidget(QtWidgets.QPushButton('Set Faces'))
                hlay2.addWidget(QtWidgets.QPushButton('FacePose'))
                hlay2.addWidget(QtWidgets.QPushButton('Gender'))
                hlay2.addWidget(QtWidgets.QPushButton('Age'))
                hlay2.addWidget(QtWidgets.QPushButton('Recognize'))

                layout = QtWidgets.QVBoxLayout()
                layout.addLayout(hlay1)
                layout.addLayout(hlay2)
                self.horizontalGroupBox.setLayout(layout)






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 12 '18 at 13:04









                eyllanesceyllanesc

                75.6k103156




                75.6k103156



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53262602%2fqbutton-layout-in-qgroupbox-for-making-ui-in-pyqt5%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    How to how show current date and time by default on contact form 7 in WordPress without taking input from user in datetimepicker

                    Syphilis

                    Darth Vader #20