How to change display size changing with window size in PyQT5?












0














I am displaying webcam image from cv2 on QPixmap.



I have PyQt5 and Python2.7.



Now the issue is the display size doesn't change with Window size.



I like to change image size together with display window size.



Now is always 640x480.



Attached images show image size is fixed.
I like to have just slightly smaller than window size and change together with window size.



enter image description hereenter image description here



My code is as follow.



from PyQt5 import QtCore, QtGui, QtWidgets 
import cv2

class Thread(QtCore.QThread):
changePixmap = QtCore.pyqtSignal(QtGui.QImage)
def run(self):
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if ret:
print(frame.shape)
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(640, 480, QtCore.Qt.KeepAspectRatio)
self.changePixmap.emit(p)


class PlayStreaming(QtWidgets.QWidget):
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)
th.start()
lay = QtWidgets.QVBoxLayout(self)
lay.addWidget(self.label, alignment=QtCore.Qt.AlignCenter)


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("Control")
self.horizontalGroupBox.setStyleSheet("QGroupBox { background-color: red}");
layout = QtWidgets.QGridLayout()
layout.addWidget(QtWidgets.QPushButton('Test'),0,0)
layout.addWidget(QtWidgets.QPushButton('Run'),0,1)
layout.addWidget(QtWidgets.QPushButton('Set Faces'),0,2)
layout.addWidget(QtWidgets.QPushButton('Recognize'),1,0)
layout.addWidget(QtWidgets.QPushButton('Rescale'),1,1)
layout.addWidget(QtWidgets.QPushButton('FacePose'),1,2)
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_())









share|improve this question





























    0














    I am displaying webcam image from cv2 on QPixmap.



    I have PyQt5 and Python2.7.



    Now the issue is the display size doesn't change with Window size.



    I like to change image size together with display window size.



    Now is always 640x480.



    Attached images show image size is fixed.
    I like to have just slightly smaller than window size and change together with window size.



    enter image description hereenter image description here



    My code is as follow.



    from PyQt5 import QtCore, QtGui, QtWidgets 
    import cv2

    class Thread(QtCore.QThread):
    changePixmap = QtCore.pyqtSignal(QtGui.QImage)
    def run(self):
    cap = cv2.VideoCapture(0)
    while True:
    ret, frame = cap.read()
    if ret:
    print(frame.shape)
    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(640, 480, QtCore.Qt.KeepAspectRatio)
    self.changePixmap.emit(p)


    class PlayStreaming(QtWidgets.QWidget):
    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)
    th.start()
    lay = QtWidgets.QVBoxLayout(self)
    lay.addWidget(self.label, alignment=QtCore.Qt.AlignCenter)


    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("Control")
    self.horizontalGroupBox.setStyleSheet("QGroupBox { background-color: red}");
    layout = QtWidgets.QGridLayout()
    layout.addWidget(QtWidgets.QPushButton('Test'),0,0)
    layout.addWidget(QtWidgets.QPushButton('Run'),0,1)
    layout.addWidget(QtWidgets.QPushButton('Set Faces'),0,2)
    layout.addWidget(QtWidgets.QPushButton('Recognize'),1,0)
    layout.addWidget(QtWidgets.QPushButton('Rescale'),1,1)
    layout.addWidget(QtWidgets.QPushButton('FacePose'),1,2)
    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_())









    share|improve this question



























      0












      0








      0







      I am displaying webcam image from cv2 on QPixmap.



      I have PyQt5 and Python2.7.



      Now the issue is the display size doesn't change with Window size.



      I like to change image size together with display window size.



      Now is always 640x480.



      Attached images show image size is fixed.
      I like to have just slightly smaller than window size and change together with window size.



      enter image description hereenter image description here



      My code is as follow.



      from PyQt5 import QtCore, QtGui, QtWidgets 
      import cv2

      class Thread(QtCore.QThread):
      changePixmap = QtCore.pyqtSignal(QtGui.QImage)
      def run(self):
      cap = cv2.VideoCapture(0)
      while True:
      ret, frame = cap.read()
      if ret:
      print(frame.shape)
      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(640, 480, QtCore.Qt.KeepAspectRatio)
      self.changePixmap.emit(p)


      class PlayStreaming(QtWidgets.QWidget):
      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)
      th.start()
      lay = QtWidgets.QVBoxLayout(self)
      lay.addWidget(self.label, alignment=QtCore.Qt.AlignCenter)


      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("Control")
      self.horizontalGroupBox.setStyleSheet("QGroupBox { background-color: red}");
      layout = QtWidgets.QGridLayout()
      layout.addWidget(QtWidgets.QPushButton('Test'),0,0)
      layout.addWidget(QtWidgets.QPushButton('Run'),0,1)
      layout.addWidget(QtWidgets.QPushButton('Set Faces'),0,2)
      layout.addWidget(QtWidgets.QPushButton('Recognize'),1,0)
      layout.addWidget(QtWidgets.QPushButton('Rescale'),1,1)
      layout.addWidget(QtWidgets.QPushButton('FacePose'),1,2)
      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_())









      share|improve this question















      I am displaying webcam image from cv2 on QPixmap.



      I have PyQt5 and Python2.7.



      Now the issue is the display size doesn't change with Window size.



      I like to change image size together with display window size.



      Now is always 640x480.



      Attached images show image size is fixed.
      I like to have just slightly smaller than window size and change together with window size.



      enter image description hereenter image description here



      My code is as follow.



      from PyQt5 import QtCore, QtGui, QtWidgets 
      import cv2

      class Thread(QtCore.QThread):
      changePixmap = QtCore.pyqtSignal(QtGui.QImage)
      def run(self):
      cap = cv2.VideoCapture(0)
      while True:
      ret, frame = cap.read()
      if ret:
      print(frame.shape)
      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(640, 480, QtCore.Qt.KeepAspectRatio)
      self.changePixmap.emit(p)


      class PlayStreaming(QtWidgets.QWidget):
      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)
      th.start()
      lay = QtWidgets.QVBoxLayout(self)
      lay.addWidget(self.label, alignment=QtCore.Qt.AlignCenter)


      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("Control")
      self.horizontalGroupBox.setStyleSheet("QGroupBox { background-color: red}");
      layout = QtWidgets.QGridLayout()
      layout.addWidget(QtWidgets.QPushButton('Test'),0,0)
      layout.addWidget(QtWidgets.QPushButton('Run'),0,1)
      layout.addWidget(QtWidgets.QPushButton('Set Faces'),0,2)
      layout.addWidget(QtWidgets.QPushButton('Recognize'),1,0)
      layout.addWidget(QtWidgets.QPushButton('Rescale'),1,1)
      layout.addWidget(QtWidgets.QPushButton('FacePose'),1,2)
      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_())






      python pyqt pyqt5






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 12 at 8:44

























      asked Nov 12 at 8:39









      batuman

      2,46564298




      2,46564298
























          1 Answer
          1






          active

          oldest

          votes


















          2














          You can listen to the resize event of PlayStreaming and send the adjusted size to the thread through the signal for scaling.



          from PyQt5 import QtCore, QtGui, QtWidgets
          import cv2


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

          def run(self):
          cap = cv2.VideoCapture(0)
          while True:
          ret, frame = cap.read()
          if ret:
          print(frame.shape)
          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("Control")
          self.horizontalGroupBox.setStyleSheet("QGroupBox { background-color: red}");
          layout = QtWidgets.QGridLayout()
          layout.addWidget(QtWidgets.QPushButton('Test'), 0, 0)
          layout.addWidget(QtWidgets.QPushButton('Run'), 0, 1)
          layout.addWidget(QtWidgets.QPushButton('Set Faces'), 0, 2)
          layout.addWidget(QtWidgets.QPushButton('Recognize'), 1, 0)
          layout.addWidget(QtWidgets.QPushButton('Rescale'), 1, 1)
          layout.addWidget(QtWidgets.QPushButton('FacePose'), 1, 2)
          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_())





          share|improve this answer





















          • Yes it works exactly
            – batuman
            Nov 12 at 9:41











          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%2f53258429%2fhow-to-change-display-size-changing-with-window-size-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 can listen to the resize event of PlayStreaming and send the adjusted size to the thread through the signal for scaling.



          from PyQt5 import QtCore, QtGui, QtWidgets
          import cv2


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

          def run(self):
          cap = cv2.VideoCapture(0)
          while True:
          ret, frame = cap.read()
          if ret:
          print(frame.shape)
          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("Control")
          self.horizontalGroupBox.setStyleSheet("QGroupBox { background-color: red}");
          layout = QtWidgets.QGridLayout()
          layout.addWidget(QtWidgets.QPushButton('Test'), 0, 0)
          layout.addWidget(QtWidgets.QPushButton('Run'), 0, 1)
          layout.addWidget(QtWidgets.QPushButton('Set Faces'), 0, 2)
          layout.addWidget(QtWidgets.QPushButton('Recognize'), 1, 0)
          layout.addWidget(QtWidgets.QPushButton('Rescale'), 1, 1)
          layout.addWidget(QtWidgets.QPushButton('FacePose'), 1, 2)
          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_())





          share|improve this answer





















          • Yes it works exactly
            – batuman
            Nov 12 at 9:41
















          2














          You can listen to the resize event of PlayStreaming and send the adjusted size to the thread through the signal for scaling.



          from PyQt5 import QtCore, QtGui, QtWidgets
          import cv2


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

          def run(self):
          cap = cv2.VideoCapture(0)
          while True:
          ret, frame = cap.read()
          if ret:
          print(frame.shape)
          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("Control")
          self.horizontalGroupBox.setStyleSheet("QGroupBox { background-color: red}");
          layout = QtWidgets.QGridLayout()
          layout.addWidget(QtWidgets.QPushButton('Test'), 0, 0)
          layout.addWidget(QtWidgets.QPushButton('Run'), 0, 1)
          layout.addWidget(QtWidgets.QPushButton('Set Faces'), 0, 2)
          layout.addWidget(QtWidgets.QPushButton('Recognize'), 1, 0)
          layout.addWidget(QtWidgets.QPushButton('Rescale'), 1, 1)
          layout.addWidget(QtWidgets.QPushButton('FacePose'), 1, 2)
          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_())





          share|improve this answer





















          • Yes it works exactly
            – batuman
            Nov 12 at 9:41














          2












          2








          2






          You can listen to the resize event of PlayStreaming and send the adjusted size to the thread through the signal for scaling.



          from PyQt5 import QtCore, QtGui, QtWidgets
          import cv2


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

          def run(self):
          cap = cv2.VideoCapture(0)
          while True:
          ret, frame = cap.read()
          if ret:
          print(frame.shape)
          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("Control")
          self.horizontalGroupBox.setStyleSheet("QGroupBox { background-color: red}");
          layout = QtWidgets.QGridLayout()
          layout.addWidget(QtWidgets.QPushButton('Test'), 0, 0)
          layout.addWidget(QtWidgets.QPushButton('Run'), 0, 1)
          layout.addWidget(QtWidgets.QPushButton('Set Faces'), 0, 2)
          layout.addWidget(QtWidgets.QPushButton('Recognize'), 1, 0)
          layout.addWidget(QtWidgets.QPushButton('Rescale'), 1, 1)
          layout.addWidget(QtWidgets.QPushButton('FacePose'), 1, 2)
          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_())





          share|improve this answer












          You can listen to the resize event of PlayStreaming and send the adjusted size to the thread through the signal for scaling.



          from PyQt5 import QtCore, QtGui, QtWidgets
          import cv2


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

          def run(self):
          cap = cv2.VideoCapture(0)
          while True:
          ret, frame = cap.read()
          if ret:
          print(frame.shape)
          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("Control")
          self.horizontalGroupBox.setStyleSheet("QGroupBox { background-color: red}");
          layout = QtWidgets.QGridLayout()
          layout.addWidget(QtWidgets.QPushButton('Test'), 0, 0)
          layout.addWidget(QtWidgets.QPushButton('Run'), 0, 1)
          layout.addWidget(QtWidgets.QPushButton('Set Faces'), 0, 2)
          layout.addWidget(QtWidgets.QPushButton('Recognize'), 1, 0)
          layout.addWidget(QtWidgets.QPushButton('Rescale'), 1, 1)
          layout.addWidget(QtWidgets.QPushButton('FacePose'), 1, 2)
          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_())






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 12 at 9:23









          郭德纲

          304110




          304110












          • Yes it works exactly
            – batuman
            Nov 12 at 9:41


















          • Yes it works exactly
            – batuman
            Nov 12 at 9:41
















          Yes it works exactly
          – batuman
          Nov 12 at 9:41




          Yes it works exactly
          – batuman
          Nov 12 at 9:41


















          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.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • 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%2f53258429%2fhow-to-change-display-size-changing-with-window-size-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

          Florida Star v. B. J. F.

          Danny Elfman

          Lugert, Oklahoma