在主窗口中,我可以打开、保存或创建图像。如果我在第二个窗口中修改此图像,当我关闭第二个窗口时,如何在主窗口中发送结果?
import sys
import cv2
from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.uic import loadUi
这是我传递主窗口中加载的图像并进行一些修改的第二个窗口。
class toolWindows(QtWidgets.QMainWindow):
def __init__(self, image):
super(toolWindows, self).__init__()
self._image = image
self._result = None
menubar = self.menuBar()
modifyImage = QtWidgets.QAction('&modifyTheImage', self)
modifyImage.setShortcut('Ctrl+M')
modifyImage.setStatusTip('modify the image image')
modifyImage.triggered.connect(self.doSomething)
fileMenu = menubar.addMenu('&modify')
fileMenu.addAction(modifyImage)
self.show()
def doSomething(self):
self._result = cv2.Canny(self._image,100,200)
cv2.imshow('doSomething',self._result)
return self._result
def getResult(self):
return self._result
这是主窗口
class mainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(mainWindow, self).__init__(*args, **kwargs)
self.mainWindowImageSource = None
self.mainWindowImageResult = None
menubar = self.menuBar()
LoadImage = QtWidgets.QAction('&LoadImage', self)
LoadImage.setShortcut('Ctrl+L')
LoadImage.setStatusTip('Load an image')
LoadImage.triggered.connect(self.loadImage)
toolWin = QtWidgets.QAction('&tool', self)
toolWin.setShortcut('Ctrl+T')
toolWin.setStatusTip('open the tool win')
toolWin.triggered.connect(self.openToolWindow)
checkResult = QtWidgets.QAction('&Check', self)
checkResult.setShortcut('Ctrl+K')
checkResult.setStatusTip('check that tool win pass the image on close')
checkResult.triggered.connect(self.checkResultImage)
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(LoadImage)
fileMenu.addAction(toolWin)
fileMenu.addAction(checkResult)
self.show()
def loadImage(self):
fileName, filter = QtWidgets.QFileDialog.getOpenFileName(self, 'Open File', 'C:\\', "Image Files (*.jpg)")
if fileName:
self.mainWindowImageSource = cv2.imread(fileName, cv2.IMREAD_COLOR)
else:
print('Invalid Image')
def openToolWindow(self):
self.tw = toolWindows(self.mainWindowImageSource)
self.tw.show()
self.mainWindowImageResult = self.tw.getResult()
def checkResultImage(self):
print("ol")
cv2.imshow('test', self.mainWindowImageResult)
cv2.waitKey(0)
cv2.destroyAllWindows()
##### APP MAIN ####
app = QtWidgets.QApplication(sys.argv)
window = mainWindow()
# this start a loop till exit
sys.exit(app.exec_())