Changez Khan
Changez Khan

Reputation: 51

How to pass name of image uploaded in GUI to another function?

here is the scenario. First I want to upload image to GUI. Later by pressing another button I want to process this uploaded image. Now, I am able to show image in GUI. But I am clueless on how to get the name of this image, so I process this image by pressing another button. Now here is my code:

from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import *
import sys
import cv2
from sklearn.externals import joblib
from sklearn.svm import LinearSVC
from skimage.feature import hog
import numpy as np
import os.path

class MainWindow(QtGui.QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()        
        self.setGeometry(100, 100, 1000,600)
        self.setWindowTitle("HandWritten Image Recognition")

        extractAction = QtGui.QAction("&Quit", self)
        extractAction.setShortcut("Ctrl+Q")
        extractAction.setStatusTip("Leave the App")
        extractAction.triggered.connect(self.close_application)

        openFile = QtGui.QAction("&Open File", self)
        openFile.setShortcut("Ctrl+O")
        openFile.setStatusTip("Open File")
        openFile.triggered.connect(self.file_open)

        processImage = QtGui.QAction("&Process Image", self)
        processImage.setShortcut("Ctrl+A")
        processImage.setStatusTip("Process Image")
        processImage.triggered.connect(self.process_image)

        mainMenu = self.menuBar()

        fileMenu = mainMenu.addMenu('&File') 
        fileMenu.addAction(openFile)
        fileMenu.addAction(processImage)        
        fileMenu.addAction(extractAction)

   def file_open(self):
        # This function is called when the user clicks File->Open.
        filename = QtGui.QFileDialog.getOpenFileName()
        print(filename)
        label = QtGui.QLabel(self)
        label.setGeometry(QtCore.QRect(0, 20, 1000, 580))
        label.setSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Preferred)
        label.setScaledContents(True)
        pixmap = QtGui.QPixmap(filename)
        label.setPixmap(pixmap)
        label.show()

    def process_image(self):
        ###Get Uploaded Image's Name

    def close_application(self):
        print("Why so hurry!!!")
        sys.exit()

def main():
    app = QtGui.QApplication(sys.argv)
    win = MainWindow()
    win.show()
    app.exec_()

if __name__ == '__main__':
    sys.exit(main()) 

Now, in process_image function, I want to use uploaded image, so I can process it further. So, for that I want to know the file path of the uploaded image. Kindly guide me here.

Upvotes: 0

Views: 199

Answers (1)

Tony Montana
Tony Montana

Reputation: 1019

It's simple. Kindly asign filename to self object's variable image. Kindly add following code to your function process_image:

os.path.basename(str(self.image))

Kindly find the updated code here:

from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import *
import sys
import cv2
from sklearn.externals import joblib
from sklearn.svm import LinearSVC
from skimage.feature import hog
import numpy as np
import os.path

class MainWindow(QtGui.QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()        
        self.setGeometry(100, 100, 1000,600)
        self.setWindowTitle("HandWritten Image Recognition")

        extractAction = QtGui.QAction("&Quit", self)
        extractAction.setShortcut("Ctrl+Q")
        extractAction.setStatusTip("Leave the App")
        extractAction.triggered.connect(self.close_application)

        openFile = QtGui.QAction("&Open File", self)
        openFile.setShortcut("Ctrl+O")
        openFile.setStatusTip("Open File")
        openFile.triggered.connect(self.file_open)

        processImage = QtGui.QAction("&Process Image", self)
        processImage.setShortcut("Ctrl+A")
        processImage.setStatusTip("Process Image")
        processImage.triggered.connect(self.process_image)

        mainMenu = self.menuBar()

        fileMenu = mainMenu.addMenu('&File') 
        fileMenu.addAction(openFile)
        fileMenu.addAction(processImage)        
        fileMenu.addAction(extractAction)

    def file_open(self):
        # This function is called when the user clicks File->Open.
        filename = QtGui.QFileDialog.getOpenFileName()
        print(filename)
        self.image = filename  #Assign filename to object's variable 'image'
        label = QtGui.QLabel(self)
        label.setGeometry(QtCore.QRect(0, 20, 1000, 580))
        label.setSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Preferred)
        label.setScaledContents(True)
        pixmap = QtGui.QPixmap(filename)
        label.setPixmap(pixmap)
        label.show()

    def process_image(self):
        print os.path.basename(str(self.image))  #Get only file name with it's extension

    def close_application(self):
        print("Why so hurry!!!")
        sys.exit()

def main():
    app = QtGui.QApplication(sys.argv)
    win = MainWindow()
    win.show()
    app.exec_()

if __name__ == '__main__':
    sys.exit(main()) 

Upvotes: 1

Related Questions