我正在开发一个应用程序,我已经使用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'])
答案 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
是否存在。
希望得到这个帮助。