Глобальные переменные в PyQT5 - PullRequest
0 голосов
/ 03 марта 2020

У меня есть два основных скрипта для моего pyQT5 gui. Сначала файл GUI ("MSCVgui_script"), а затем файл запуска ("guiRun" .py). Когда я запускаю свой файл запуска, GUI вылетает, когда я изменяю переменную «self.imageFiles1» в функции assingPics.

Что я делаю:

  1. запустите "guiRun.py"
  2. Выберите "Обзор файла"
  3. выберите папку из всплывающего окна
  4. Закрыть всплывающее окно
  5. установите флажок синего цвета на GUI
  6. Cra sh -> нет сообщения об ошибке Пути к файлам фотографий: "C: \ Users ..... \ Images \ photo_Blue.jpg "имена" photo_Blue "

запустить Gui скрипт ниже

from MSCVgui_script import Ui_MainWindow
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import glob
import cv2
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QFileDialog
from PyQt5.QtGui import QIcon
import fileExplorer

class Main(QtWidgets.QMainWindow, Ui_MainWindow):




  def __init__(self):
    QtWidgets.QMainWindow.__init__(self)
    self.setupUi(self)
    self.setupInputs()
    #List of image types 
    self.image_Types=["photo_NIR", "photo_UV", "photo_Unfiltered", "photo_Polarized","photo_DarkRed","photo_LightRed","photo_Orange","photo_LightGreen","photo_Cyan","photo_Blue"]

    #first stack of images 
    self.imageFiles1 = {}
    #images to process 
    self.images_to_process=[]


  def setupInputs(self):
    self.File01.clicked.connect(self.openFolder)
    self.checkBox_BL.stateChanged.connect(self.imageChange)
    #self.checkBox_UV.clicked.connect(self.image1Change()
    #self.checkBox_NIR.clicked.toggle.onnect(self.image1Change(0))




  #open folder and import images into code
  def assingPics(self,folder):
    path = folder+"/*.jpg"
    image_files = glob.glob(path)
    for filepath in image_files:
      for i in self.image_Types:
        if(i in filepath):
          #self.imageFiles1[i] = filepath#HERE SEEMS TO BE THE PROBLEM 
          break
    print("done")


  #open the folder containing the images to build a stack from 
  def openFolder(self):
    folderOpener = fileExplorer.App()
    imgFiles = folderOpener.openFileNameDialog()
    folderOpener.closeTh()
    self.assingPics(imgFiles)
    return imgFiles

  #change image 1 according to check box
  def imageChange(self):
    print("CHANGE")
    if(self.checkBox_BL.isChecked()):
      print("start")
      imag = self.imageFiles1['photo_Blue']
      imag = cv2.imread(imag,0)
      imag = QtGui.QImage(imag.data, imag.shape[1], imag.shape[0], QtGui.QImage.Format_RGB888).rgbSwapped()
    if(self.checkBox_CY.isChecked()):
      print("dumb")

    if(self.checkBox_DR.isChecked()):
      print("dumb")


    if(self.checkBox_LG.isChecked()):
      print("dumb")


    if(self.checkBox_LP.isChecked()):
      print("dumb")

    if(self.checkBox_LR.isChecked()):
      print("dumb")

    if(self.checkBox_NIR.isChecked()):
      print("dumb")

    if(self.checkBox_OR.isChecked()):
      print("dumb")

    if(self.checkBox_UF.isChecked()):
      print("dumb")

    if(self.checkBox_UV.isChecked()):
      print("dumb")


if __name__ == "__main__":
    sys._excepthook = sys.excepthook 
    def exception_hook(exctype, value, traceback):
      print(exctype, value, traceback)
      sys._excepthook(exctype, value, traceback) 
      sys.exit(1) 
      sys.excepthook = exception_hook 
    # from multiprocessing import freeze_support
    # freeze_support()
    app = QtWidgets.QApplication(sys.argv)
    window = Main()
    # icon = QtGui.QIcon()
    # icon.addPixmap(QtGui.QPixmap("exe/xrt.ico"),QtGui.QIcon.Normal, QtGui.QIcon.Off)
    # window.setWindowIcon(icon)
    window.show()
    sys.exit(app.exec_())

MSCVgui_script ниже

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1640, 900)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.File01 = QtWidgets.QPushButton(self.centralwidget)
        self.File01.setGeometry(QtCore.QRect(20, 5, 200, 40))
        self.File01.setObjectName("File01")
        self.Image01 = QtWidgets.QLabel(self.centralwidget)
        self.Image01.setGeometry(QtCore.QRect(30, 85, 1000, 300))
        self.Image01.setObjectName("Image01")
        self.checkBox_UV = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_UV.setGeometry(QtCore.QRect(100, 45, 87, 20))
        self.checkBox_UV.setObjectName("checkBox_UV")
        self.checkBox_NIR = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_NIR.setGeometry(QtCore.QRect(300, 45, 87, 20))
        self.checkBox_NIR.setObjectName("checkBox_NIR")
        self.checkBox_DR = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_DR.setGeometry(QtCore.QRect(500, 45, 87, 20))
        self.checkBox_DR.setObjectName("checkBox_DR")
        self.checkBox_LR = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_LR.setGeometry(QtCore.QRect(700, 45, 87, 20))
        self.checkBox_LR.setObjectName("checkBox_LR")
        self.checkBox_OR = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_OR.setGeometry(QtCore.QRect(900, 45, 87, 20))
        self.checkBox_OR.setObjectName("checkBox_OR")
        self.checkBox_LG = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_LG.setGeometry(QtCore.QRect(100, 405, 97, 20))
        self.checkBox_LG.setObjectName("checkBox_LG")
        self.checkBox_CY = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_CY.setGeometry(QtCore.QRect(300, 405, 87, 20))
        self.checkBox_CY.setObjectName("checkBox_CY")
        self.checkBox_BL = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_BL.setGeometry(QtCore.QRect(500, 405, 87, 20))
        self.checkBox_BL.setObjectName("checkBox_BL")
        self.checkBox_LP = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_LP.setGeometry(QtCore.QRect(700, 405, 87, 20))
        self.checkBox_LP.setObjectName("checkBox_LP")
        self.checkBox_UF = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_UF.setGeometry(QtCore.QRect(900, 405, 87, 20))
        self.checkBox_UF.setObjectName("checkBox_UF")
        self.File02 = QtWidgets.QPushButton(self.centralwidget)
        self.File02.setGeometry(QtCore.QRect(20, 440, 200, 40))
        self.File02.setObjectName("File02")
        self.Image02 = QtWidgets.QLabel(self.centralwidget)
        self.Image02.setGeometry(QtCore.QRect(30, 515, 1000, 300))
        self.Image02.setObjectName("Image02")
        self.checkBox_UV2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_UV2.setGeometry(QtCore.QRect(100, 480, 87, 20))
        self.checkBox_UV2.setObjectName("checkBox_UV2")
        self.checkBox_NIR2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_NIR2.setGeometry(QtCore.QRect(300, 480, 87, 20))
        self.checkBox_NIR2.setObjectName("checkBox_NIR2")
        self.checkBox_DR2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_DR2.setGeometry(QtCore.QRect(500, 480, 87, 20))
        self.checkBox_DR2.setObjectName("checkBox_DR2")
        self.checkBox_LR2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_LR2.setGeometry(QtCore.QRect(700, 480, 87, 20))
        self.checkBox_LR2.setObjectName("checkBox_LR2")
        self.checkBox_OR2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_OR2.setGeometry(QtCore.QRect(900, 480, 87, 20))
        self.checkBox_OR2.setObjectName("checkBox_OR2")
        self.checkBox_LG2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_LG2.setGeometry(QtCore.QRect(90, 830, 97, 20))
        self.checkBox_LG2.setObjectName("checkBox_LG2")
        self.checkBox_CY2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_CY2.setGeometry(QtCore.QRect(300, 830, 87, 20))
        self.checkBox_CY2.setObjectName("checkBox_CY2")
        self.checkBox_BL2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_BL2.setGeometry(QtCore.QRect(500, 830, 87, 20))
        self.checkBox_BL2.setObjectName("checkBox_BL2")
        self.checkBox_LP2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_LP2.setGeometry(QtCore.QRect(700, 830, 87, 20))
        self.checkBox_LP2.setObjectName("checkBox_LP2")
        self.checkBox_UF2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_UF2.setGeometry(QtCore.QRect(900, 830, 87, 20))
        self.checkBox_UF2.setObjectName("checkBox_UF2")
        self.line_vert = QtWidgets.QFrame(self.centralwidget)
        self.line_vert.setGeometry(QtCore.QRect(1050, 30, 20, 801))
        self.line_vert.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_vert.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_vert.setObjectName("line_vert")
        self.ImageAnalysisHeading = QtWidgets.QLabel(self.centralwidget)
        self.ImageAnalysisHeading.setGeometry(QtCore.QRect(1190, 20, 329, 22))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.ImageAnalysisHeading.setFont(font)
        self.ImageAnalysisHeading.setObjectName("ImageAnalysisHeading")
        self.radioButton_ImageDif = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_ImageDif.setGeometry(QtCore.QRect(1090, 670, 141, 20))
        self.radioButton_ImageDif.setObjectName("radioButton_ImageDif")
        self.radioButton_Otsu = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_Otsu.setGeometry(QtCore.QRect(1090, 120, 211, 20))
        self.radioButton_Otsu.setObjectName("radioButton_Otsu")
        self.label_EdgeDetHeading = QtWidgets.QLabel(self.centralwidget)
        self.label_EdgeDetHeading.setGeometry(QtCore.QRect(1090, 180, 111, 16))
        self.label_EdgeDetHeading.setObjectName("label_EdgeDetHeading")
        self.radioButton_Canny = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_Canny.setGeometry(QtCore.QRect(1090, 220, 161, 20))
        self.radioButton_Canny.setObjectName("radioButton_Canny")
        self.radioButton_laplacian = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_laplacian.setGeometry(QtCore.QRect(1320, 220, 100, 20))
        self.radioButton_laplacian.setObjectName("radioButton_laplacian")
        self.radioButton_sobelx = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_sobelx.setGeometry(QtCore.QRect(1090, 260, 100, 20))
        self.radioButton_sobelx.setObjectName("radioButton_sobelx")
        self.radioButton_sobely = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_sobely.setGeometry(QtCore.QRect(1320, 260, 100, 20))
        self.radioButton_sobely.setObjectName("radioButton_sobely")
        self.radioButton_XRcustum = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_XRcustum.setGeometry(QtCore.QRect(1090, 630, 100, 20))
        self.radioButton_XRcustum.setObjectName("radioButton_XRcustum")
        self.radioButton_plotH = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_plotH.setGeometry(QtCore.QRect(1090, 710, 121, 20))
        self.radioButton_plotH.setObjectName("radioButton_plotH")
        self.radioButton_CLAHE = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_CLAHE.setGeometry(QtCore.QRect(1530, 320, 100, 20))
        self.radioButton_CLAHE.setObjectName("radioButton_CLAHE")
        self.radioButton_Watershed = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_Watershed.setGeometry(QtCore.QRect(1090, 320, 221, 20))
        self.radioButton_Watershed.setObjectName("radioButton_Watershed")
        self.radioButton_contours = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_contours.setGeometry(QtCore.QRect(1320, 320, 100, 20))
        self.radioButton_contours.setObjectName("radioButton_contours")
        self.label_MorphHeading = QtWidgets.QLabel(self.centralwidget)
        self.label_MorphHeading.setGeometry(QtCore.QRect(1090, 380, 191, 16))
        self.label_MorphHeading.setObjectName("label_MorphHeading")
        self.radioButton_erosion = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_erosion.setGeometry(QtCore.QRect(1090, 410, 100, 20))
        self.radioButton_erosion.setObjectName("radioButton_erosion")
        self.radioButton_dilation = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_dilation.setGeometry(QtCore.QRect(1320, 410, 100, 20))
        self.radioButton_dilation.setObjectName("radioButton_dilation")
        self.radioButton_closing = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_closing.setGeometry(QtCore.QRect(1530, 410, 100, 20))
        self.radioButton_closing.setObjectName("radioButton_closing")
        self.radioButton_opening = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_opening.setGeometry(QtCore.QRect(1090, 450, 100, 20))
        self.radioButton_opening.setObjectName("radioButton_opening")
        self.radioButton_morphgradient = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton_morphgradient.setGeometry(QtCore.QRect(1320, 450, 171, 20))
        self.radioButton_morphgradient.setObjectName("radioButton_morphgradient")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(1200, 760, 291, 61))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        self.line = QtWidgets.QFrame(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(27, 425, 1001, 20))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(1200, 510, 291, 61))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(1090, 80, 131, 16))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(1090, 590, 131, 16))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1640, 22))
        self.menubar.setObjectName("menubar")
        self.menuMulti_Spectrum_Computer_Vision = QtWidgets.QMenu(self.menubar)
        font = QtGui.QFont()
        font.setPointSize(18)
        self.menuMulti_Spectrum_Computer_Vision.setFont(font)
        self.menuMulti_Spectrum_Computer_Vision.setObjectName("menuMulti_Spectrum_Computer_Vision")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.menubar.addAction(self.menuMulti_Spectrum_Computer_Vision.menuAction())
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)



    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.File01.setText(_translate("MainWindow", "Browse File (Image 1)"))
        self.Image01.setText(_translate("MainWindow", "Image01"))
        self.checkBox_UV.setText(_translate("MainWindow", "UV"))
        self.checkBox_NIR.setText(_translate("MainWindow", "NIR"))
        self.checkBox_DR.setText(_translate("MainWindow", "Dark Red"))
        self.checkBox_LR.setText(_translate("MainWindow", "Light Red"))
        self.checkBox_OR.setText(_translate("MainWindow", "Orange"))
        self.checkBox_LG.setText(_translate("MainWindow", "Light Green"))
        self.checkBox_CY.setText(_translate("MainWindow", "Cyan"))
        self.checkBox_BL.setText(_translate("MainWindow", "Blue"))
        self.checkBox_LP.setText(_translate("MainWindow", "Polarized"))
        self.checkBox_UF.setText(_translate("MainWindow", "Unfiltered"))
        self.File02.setText(_translate("MainWindow", "Browse File (Image 2)"))
        self.Image02.setText(_translate("MainWindow", "Image02"))
        self.checkBox_UV2.setText(_translate("MainWindow", "UV"))
        self.checkBox_NIR2.setText(_translate("MainWindow", "NIR"))
        self.checkBox_DR2.setText(_translate("MainWindow", "Dark Red"))
        self.checkBox_LR2.setText(_translate("MainWindow", "Light Red"))
        self.checkBox_OR2.setText(_translate("MainWindow", "Orange"))
        self.checkBox_LG2.setText(_translate("MainWindow", "Light Green"))
        self.checkBox_CY2.setText(_translate("MainWindow", "Cyan"))
        self.checkBox_BL2.setText(_translate("MainWindow", "Blue"))
        self.checkBox_LP2.setText(_translate("MainWindow", "Polarized"))
        self.checkBox_UF2.setText(_translate("MainWindow", "Unfiltered"))
        self.ImageAnalysisHeading.setText(_translate("MainWindow", "SELECT IMAGE ANALYSIS TO PERFORM"))
        self.radioButton_ImageDif.setText(_translate("MainWindow", "Image Difference"))
        self.radioButton_Otsu.setText(_translate("MainWindow", "Binarization (Otsu Threshold)"))
        self.label_EdgeDetHeading.setText(_translate("MainWindow", "Edge Detection"))
        self.radioButton_Canny.setText(_translate("MainWindow", "Canny Edge Detection"))
        self.radioButton_laplacian.setText(_translate("MainWindow", "Laplacian"))
        self.radioButton_sobelx.setText(_translate("MainWindow", "Sobel X"))
        self.radioButton_sobely.setText(_translate("MainWindow", "Sobel Y"))
        self.radioButton_XRcustum.setText(_translate("MainWindow", "XR Custom"))
        self.radioButton_plotH.setText(_translate("MainWindow", "Plot Histogram"))
        self.radioButton_CLAHE.setText(_translate("MainWindow", "CLAHE"))
        self.radioButton_Watershed.setText(_translate("MainWindow", "Watershed Image Segmentation"))
        self.radioButton_contours.setText(_translate("MainWindow", "Contours"))
        self.label_MorphHeading.setText(_translate("MainWindow", "Morphological Transformations"))
        self.radioButton_erosion.setText(_translate("MainWindow", "Erosion"))
        self.radioButton_dilation.setText(_translate("MainWindow", "Dilation"))
        self.radioButton_closing.setText(_translate("MainWindow", "Closing"))
        self.radioButton_opening.setText(_translate("MainWindow", "Opening"))
        self.radioButton_morphgradient.setText(_translate("MainWindow", "Morphological Gradient"))
        self.pushButton.setText(_translate("MainWindow", "RUN & SAVE"))
        self.pushButton_2.setText(_translate("MainWindow", "SAVE OUTPUT"))
        self.label.setText(_translate("MainWindow", "PREPROCESSING"))
        self.label_2.setText(_translate("MainWindow", "IMAGE ANALYSIS"))
        self.menuMulti_Spectrum_Computer_Vision.setTitle(_translate("MainWindow", "Multi-Spectrum Computer Vision")) 

Я знаю, что это как-то связано с переменной класса self.imageFiles1 [i] и моим отсутствием понимания pyQT5. Может кто-нибудь объяснить, как обрабатывать глобальные переменные в скрипте запуска pyQT5?

1 Ответ

0 голосов
/ 04 марта 2020

imag = cv2.imread(imag, 0) возвращает изображение в оттенках серого, поэтому imag.data будет символом, содержащим height*width 8-битные целые числа вместо height*width*3, что необходимо для QtGui.QImage(imag.data, imag.shape[1], imag.shape[0], QtGui.QImage.Format_RGB888). Для загрузки цветного изображения используйте imag = cv2.imread(imag, 1) (или просто imag = cv2.imread(imag), поскольку flag == 1 является значением по умолчанию).

В качестве альтернативы вы можете просто использовать имя файла для инициализации объекта QImage вместо того, чтобы сначала создавать изображение OpenCV.

imag = QtGui.QImage(self.imageFiles1['photo_Blue'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...