Search code examples
pythonooppyqt5python-object

Browse file and use its path in a different file


I am having a bit of trouble with PyQt5. I am trying to create a program that browses a file and when a file is found, it keeps the path in memory and when I press a button, it runs another .py file using the path from browse. Here is what I was able to do so far.

File1.py

    from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_DE(object):
    def setupUi(self, DE):
        DE.setObjectName("DE")
        DE.resize(1149, 517)
        font = QtGui.QFont()
        font.setPointSize(10)
        DE.setFont(font)

        # The "browse" button
        self.GermanyBrowse = QtWidgets.QPushButton(DE)
        self.GermanyBrowse.setGeometry(QtCore.QRect(240, 60, 91, 21))
        self.GermanyBrowse.setObjectName("GermanyBrowse")
        self.GermanyBrowse.clicked.connect(self.getfile)

        # The run button
        self.Run = QtWidgets.QPushButton(DE)
        self.Run.setGeometry(QtCore.QRect(500, 460, 156, 23))
        self.Run.setObjectName("Run")
        self.Run.clicked.connect(self.runFile())


        self.retranslateUi(DE)

    def retranslateUi(self, DE):
        _translate = QtCore.QCoreApplication.translate
        DE.setWindowTitle(_translate("DE", "Title"))
        self.Run.setText(_translate("DE", "Run"))
        self.GermanyBrowse.setText(_translate("DE", "Browse"))

    def getfile(self):
        fileName, _ = QtWidgets.QFileDialog.getOpenFileName(
            None,
            "Select file",
            "",
            "*.xlsx", )
        return fileName

    def runFile(self):
        import File2.py
        file2.name_of_file()


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    DE = QtWidgets.QDialog()
    ui = Ui_DE()
    ui.setupUi(DE)
    DE.show()
    sys.exit(app.exec_())

File2.py

import File1

x = File1.Ui_DE.getfile(GermanyBrowse)


def name_of_file(str):
    alert = QtWidgets.QMessageBox()
    alert.setText(f"You have opnened {str}")
    alert.exec_()

"NameError: name 'GermanyBrowse' is not defined" - Is what I get when I run File2.py

My question is, how do I call the path from "self.GermanyBrowse.clicked.connect(self.getfile) from File1.py to File2.py as a string.

Thank you!


Solution

  • Try it:

    file1.py

    from PyQt5 import QtCore, QtGui, QtWidgets
    
    class Ui_DE(object):
        def setupUi(self, DE):
            DE.setObjectName("DE")
            DE.resize(1149, 517)
            font = QtGui.QFont()
            font.setPointSize(10)
            DE.setFont(font)
    
            # The "browse" button
            self.GermanyBrowse = QtWidgets.QPushButton(DE)
            self.GermanyBrowse.setGeometry(QtCore.QRect(240, 60, 91, 21))
            self.GermanyBrowse.setObjectName("GermanyBrowse")
            self.GermanyBrowse.clicked.connect(self.getfile)
    
            # The run button
            self.Run = QtWidgets.QPushButton(DE)
            self.Run.setGeometry(QtCore.QRect(500, 460, 156, 23))
            self.Run.setObjectName("Run")
            self.Run.clicked.connect(self.runFile)  # - ()
    
            self.retranslateUi(DE)
    
        def retranslateUi(self, DE):
            _translate = QtCore.QCoreApplication.translate
            DE.setWindowTitle(_translate("DE", "Title"))
            self.Run.setText(_translate("DE", "Run"))
            self.GermanyBrowse.setText(_translate("DE", "Browse"))
    
        def getfile(self):
            fileName, _ = QtWidgets.QFileDialog.getOpenFileName(
                None,
                "Select file",
                "",
                "*.xlsx", )
            return fileName
    
        def runFile(self):
            import file2                                      # --- File2.py
            file2.name_of_file(file2.x)                       # +++ (file2.x)
    
    if __name__ == "__main__":
        import sys
    
        app = QtWidgets.QApplication(sys.argv)
        DE = QtWidgets.QDialog()
        ui = Ui_DE()
        ui.setupUi(DE)
        DE.show()
        sys.exit(app.exec_())
    

    file2.py

    from PyQt5 import QtWidgets                               # +++
    import file1                                              # - DailyMCI, + file1
    
    #x = DailyMCI.Ui_DE.getfile(GermanyBrowse)                # ---
    x = file1.Ui_DE.getfile(file1.Ui_DE)                      # +++
    
    def name_of_file(str):
        alert = QtWidgets.QMessageBox()
        alert.setText("You have opnened {str}".format(str=str)) # I have python 3.5 (f"You have opnened {str}")
        alert.exec_()
    

    enter image description here