Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. QGraphicsView's problem
Forum Updated to NodeBB v4.3 + New Features

QGraphicsView's problem

Scheduled Pinned Locked Moved Unsolved Qt for Python
4 Posts 2 Posters 451 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    Acton Martin
    wrote on last edited by
    #1

    when I want to make a GUI , a pushbutton to chose file ,and a QGraphicsView shows the image I chosen. But there are problems. The image doesn's show here. I can sure I lost some detail things.
    logic code first:

    import sys
    import os
    from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox, QGraphicsView, QGraphicsScene, QGraphicsPixmapItem
    from PyQt5.QtGui import QPixmap, QImage
    from photo_view import Ui_Photo_view
    from PIL import Image
    import cv2
    
    
    class show_photo(QMainWindow):
    	def __init__(self):
    		super(show_photo,self).__init__()
    		self.ui =Ui_Photo_view()
    		self.ui.setupUi(self)
    		self.view = QGraphicsView()
    
    	def select_button_clicked(self):
    		file_name = QFileDialog.getOpenFileName(self, "Open File", "./", "jpg (*.jpg)")
    		image_path = file_name[0]
    		if (file_name[0] == ""):
    			QMessageBox.information(self, "提示", self.tr("没有选择图片文件!"))
    		print(image_path)
    		img = cv2.imread(image_path)  
    		img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  
    		x = img.shape[1]  
    		y = img.shape[0]
    		self.zoomscale = 1  
    		frame = QImage(img, x, y, QImage.Format_RGB888)
    		pix = QPixmap.fromImage(frame)
    		self.item = QGraphicsPixmapItem(pix)  
    		self.scene = QGraphicsScene()  
    		self.scene.addItem(self.item)
    		self.view.setScene(self.scene)
    
    if __name__ == "__main__":
    	app = QApplication(sys.argv)
    	mainWindow = show_photo()
    	mainWindow.show()
    	sys.exit(app.exec_())
    
    
    

    then the GUI code:

    # -*- coding: utf-8 -*-
    
    # Form implementation generated from reading ui file 'D:\Projects\photo_view/photo_view.ui'
    #
    # Created by: PyQt5 UI code generator 5.12.3
    #
    # WARNING! All changes made in this file will be lost!
    
    
    from PyQt5 import QtCore, QtGui, QtWidgets
    
    
    class Ui_Photo_view(object):
        def setupUi(self, Photo_view):
            Photo_view.setObjectName("Photo_view")
            Photo_view.resize(890, 682)
            self.centralwidget = QtWidgets.QWidget(Photo_view)
            self.centralwidget.setObjectName("centralwidget")
            self.select_button = QtWidgets.QPushButton(self.centralwidget)
            self.select_button.setGeometry(QtCore.QRect(770, 140, 75, 23))
            self.select_button.setCheckable(True)
            self.select_button.setObjectName("select_button")
            self.pic_show = QtWidgets.QGraphicsView(self.centralwidget)
            self.pic_show.setGeometry(QtCore.QRect(0, 0, 711, 641))
            self.pic_show.setObjectName("pic_show")
            Photo_view.setCentralWidget(self.centralwidget)
            self.menubar = QtWidgets.QMenuBar(Photo_view)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 890, 23))
            self.menubar.setObjectName("menubar")
            Photo_view.setMenuBar(self.menubar)
            self.statusbar = QtWidgets.QStatusBar(Photo_view)
            self.statusbar.setObjectName("statusbar")
            Photo_view.setStatusBar(self.statusbar)
    
            self.retranslateUi(Photo_view)
            self.select_button.clicked.connect(Photo_view.select_button_clicked)
            QtCore.QMetaObject.connectSlotsByName(Photo_view)
    
        def retranslateUi(self, Photo_view):
            _translate = QtCore.QCoreApplication.translate
            Photo_view.setWindowTitle(_translate("Photo_view", "MainWindow"))
            self.select_button.setText(_translate("Photo_view", "选择文件"))
    
    
    jsulmJ 2 Replies Last reply
    0
    • A Acton Martin

      when I want to make a GUI , a pushbutton to chose file ,and a QGraphicsView shows the image I chosen. But there are problems. The image doesn's show here. I can sure I lost some detail things.
      logic code first:

      import sys
      import os
      from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox, QGraphicsView, QGraphicsScene, QGraphicsPixmapItem
      from PyQt5.QtGui import QPixmap, QImage
      from photo_view import Ui_Photo_view
      from PIL import Image
      import cv2
      
      
      class show_photo(QMainWindow):
      	def __init__(self):
      		super(show_photo,self).__init__()
      		self.ui =Ui_Photo_view()
      		self.ui.setupUi(self)
      		self.view = QGraphicsView()
      
      	def select_button_clicked(self):
      		file_name = QFileDialog.getOpenFileName(self, "Open File", "./", "jpg (*.jpg)")
      		image_path = file_name[0]
      		if (file_name[0] == ""):
      			QMessageBox.information(self, "提示", self.tr("没有选择图片文件!"))
      		print(image_path)
      		img = cv2.imread(image_path)  
      		img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  
      		x = img.shape[1]  
      		y = img.shape[0]
      		self.zoomscale = 1  
      		frame = QImage(img, x, y, QImage.Format_RGB888)
      		pix = QPixmap.fromImage(frame)
      		self.item = QGraphicsPixmapItem(pix)  
      		self.scene = QGraphicsScene()  
      		self.scene.addItem(self.item)
      		self.view.setScene(self.scene)
      
      if __name__ == "__main__":
      	app = QApplication(sys.argv)
      	mainWindow = show_photo()
      	mainWindow.show()
      	sys.exit(app.exec_())
      
      
      

      then the GUI code:

      # -*- coding: utf-8 -*-
      
      # Form implementation generated from reading ui file 'D:\Projects\photo_view/photo_view.ui'
      #
      # Created by: PyQt5 UI code generator 5.12.3
      #
      # WARNING! All changes made in this file will be lost!
      
      
      from PyQt5 import QtCore, QtGui, QtWidgets
      
      
      class Ui_Photo_view(object):
          def setupUi(self, Photo_view):
              Photo_view.setObjectName("Photo_view")
              Photo_view.resize(890, 682)
              self.centralwidget = QtWidgets.QWidget(Photo_view)
              self.centralwidget.setObjectName("centralwidget")
              self.select_button = QtWidgets.QPushButton(self.centralwidget)
              self.select_button.setGeometry(QtCore.QRect(770, 140, 75, 23))
              self.select_button.setCheckable(True)
              self.select_button.setObjectName("select_button")
              self.pic_show = QtWidgets.QGraphicsView(self.centralwidget)
              self.pic_show.setGeometry(QtCore.QRect(0, 0, 711, 641))
              self.pic_show.setObjectName("pic_show")
              Photo_view.setCentralWidget(self.centralwidget)
              self.menubar = QtWidgets.QMenuBar(Photo_view)
              self.menubar.setGeometry(QtCore.QRect(0, 0, 890, 23))
              self.menubar.setObjectName("menubar")
              Photo_view.setMenuBar(self.menubar)
              self.statusbar = QtWidgets.QStatusBar(Photo_view)
              self.statusbar.setObjectName("statusbar")
              Photo_view.setStatusBar(self.statusbar)
      
              self.retranslateUi(Photo_view)
              self.select_button.clicked.connect(Photo_view.select_button_clicked)
              QtCore.QMetaObject.connectSlotsByName(Photo_view)
      
          def retranslateUi(self, Photo_view):
              _translate = QtCore.QCoreApplication.translate
              Photo_view.setWindowTitle(_translate("Photo_view", "MainWindow"))
              self.select_button.setText(_translate("Photo_view", "选择文件"))
      
      
      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @Acton-Martin I think you forgot

      self.view.show()
      

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      A 1 Reply Last reply
      0
      • A Acton Martin

        when I want to make a GUI , a pushbutton to chose file ,and a QGraphicsView shows the image I chosen. But there are problems. The image doesn's show here. I can sure I lost some detail things.
        logic code first:

        import sys
        import os
        from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox, QGraphicsView, QGraphicsScene, QGraphicsPixmapItem
        from PyQt5.QtGui import QPixmap, QImage
        from photo_view import Ui_Photo_view
        from PIL import Image
        import cv2
        
        
        class show_photo(QMainWindow):
        	def __init__(self):
        		super(show_photo,self).__init__()
        		self.ui =Ui_Photo_view()
        		self.ui.setupUi(self)
        		self.view = QGraphicsView()
        
        	def select_button_clicked(self):
        		file_name = QFileDialog.getOpenFileName(self, "Open File", "./", "jpg (*.jpg)")
        		image_path = file_name[0]
        		if (file_name[0] == ""):
        			QMessageBox.information(self, "提示", self.tr("没有选择图片文件!"))
        		print(image_path)
        		img = cv2.imread(image_path)  
        		img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  
        		x = img.shape[1]  
        		y = img.shape[0]
        		self.zoomscale = 1  
        		frame = QImage(img, x, y, QImage.Format_RGB888)
        		pix = QPixmap.fromImage(frame)
        		self.item = QGraphicsPixmapItem(pix)  
        		self.scene = QGraphicsScene()  
        		self.scene.addItem(self.item)
        		self.view.setScene(self.scene)
        
        if __name__ == "__main__":
        	app = QApplication(sys.argv)
        	mainWindow = show_photo()
        	mainWindow.show()
        	sys.exit(app.exec_())
        
        
        

        then the GUI code:

        # -*- coding: utf-8 -*-
        
        # Form implementation generated from reading ui file 'D:\Projects\photo_view/photo_view.ui'
        #
        # Created by: PyQt5 UI code generator 5.12.3
        #
        # WARNING! All changes made in this file will be lost!
        
        
        from PyQt5 import QtCore, QtGui, QtWidgets
        
        
        class Ui_Photo_view(object):
            def setupUi(self, Photo_view):
                Photo_view.setObjectName("Photo_view")
                Photo_view.resize(890, 682)
                self.centralwidget = QtWidgets.QWidget(Photo_view)
                self.centralwidget.setObjectName("centralwidget")
                self.select_button = QtWidgets.QPushButton(self.centralwidget)
                self.select_button.setGeometry(QtCore.QRect(770, 140, 75, 23))
                self.select_button.setCheckable(True)
                self.select_button.setObjectName("select_button")
                self.pic_show = QtWidgets.QGraphicsView(self.centralwidget)
                self.pic_show.setGeometry(QtCore.QRect(0, 0, 711, 641))
                self.pic_show.setObjectName("pic_show")
                Photo_view.setCentralWidget(self.centralwidget)
                self.menubar = QtWidgets.QMenuBar(Photo_view)
                self.menubar.setGeometry(QtCore.QRect(0, 0, 890, 23))
                self.menubar.setObjectName("menubar")
                Photo_view.setMenuBar(self.menubar)
                self.statusbar = QtWidgets.QStatusBar(Photo_view)
                self.statusbar.setObjectName("statusbar")
                Photo_view.setStatusBar(self.statusbar)
        
                self.retranslateUi(Photo_view)
                self.select_button.clicked.connect(Photo_view.select_button_clicked)
                QtCore.QMetaObject.connectSlotsByName(Photo_view)
        
            def retranslateUi(self, Photo_view):
                _translate = QtCore.QCoreApplication.translate
                Photo_view.setWindowTitle(_translate("Photo_view", "MainWindow"))
                self.select_button.setText(_translate("Photo_view", "选择文件"))
        
        
        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #3

        @Acton-Martin Please do not create a new thread for that: https://forum.qt.io/topic/110747/thank-you :-)
        It creates a new window because your self.view does not have a parent.
        Try

        self.view = QGraphicsView(self)
        

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • jsulmJ jsulm

          @Acton-Martin I think you forgot

          self.view.show()
          
          A Offline
          A Offline
          Acton Martin
          wrote on last edited by
          #4

          @jsulm Give my best thanks for your help. I make a mistake to Reply.

          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved