将数据从一个功能传递到另一个功能。蟒

时间:2018-02-19 08:31:23

标签: python pyqt event-handling pyqt5 desktop-application

我正在开发一个应用程序,我已经使用qt5创建者创建了一个UI。我有一个绑定按钮的功能。

self.dataChooseBtn.clicked.connect(self.selectFile)
self.data_processing.clicked.connect(self.process)

def selectFile(self):    
    options = QFileDialog.Options()
    options |= QFileDialog.DontUseNativeDialog
    fileName, _ = QFileDialog.getOpenFileName(self,"Выберите стандартизированную выборку", "","All Files (*);;Python Files (*.py)", options=options)
    if fileName:
        print(fileName)
        return fileName

按下此按钮时,我会看到一个对话窗口,我可以在其中选择一个文件。

另外,我有一个应该处理所选文件的函数。现在,文件路径及其名称是硬编码的。

def process(self):
    file_location = "/Users/Graygood/Desktop/Science\ comput/Application/Sheet.xlsx"
    sample = pd.read_excel('Sheet.xlsx', sheetname ='Sheet1', index_col=None, na_values=['NA'])

我想要的是得到selectFile()函数的输出(由点击触发) (例如:/ Users / Graygood / Desktop / Science comput / Application / Sheet.xlsx)  并将其插入process()函数(也由单击触发),而不再触发对话窗口。如果我只是在selectFile()中调用process()函数,就会发生这种情况。

def process(self):
    fileName = self.selectFile()
    file_location = fileName
    sample = pd.read_excel('Sheet.xlsx', sheetname ='Sheet1', index_col=None, na_values=['NA'])

2 个答案:

答案 0 :(得分:1)

您需要做的就是点击按钮获取打开的文件路径。并在file_path上调用process方法

def selectFile(self):    
    options = QFileDialog.Options()
    options |= QFileDialog.DontUseNativeDialog
    # read the file path
    file_path, _ = QFileDialog.getOpenFileName(self,"Выберите стандартизированную выборку", "","All Files (*);;Python Files (*.py)", options=options)
    if file_path:
        # print the file_path and call process on it.
        print(file_path)
        self.process(file_path)
        return file_path

def process(self, file_path):
    # read the file at path and process it
    sample = pd.read_excel(file_path, sheetname ='Sheet1', index_col=None, na_values=['NA'])
    print("processed")

答案 1 :(得分:0)

您应该使用fileName作为类属性,因此如果您想重复使用它而不将其传递给所有函数,请存储您的文件名以便能够跟踪。

只需将selectFile更改为:

即可
def selectFile(self):    
    options = QFileDialog.Options()
    options |= QFileDialog.DontUseNativeDialog
    fileName, _ = QFileDialog.getOpenFileName(self,"Выберите стандартизированную выборку", "","All Files (*);;Python Files (*.py)", options=options)
    if fileName:
        print(fileName)
        self.fileName = fileName

然后在self.fileName中致电process(self)

为了避免错误,您还应该在 init 方法中声明它:self.fileName = None并在尝试使用之前始终测试self.fileName是否存在。

希望得到这个帮助。