【发布时间】:2021-10-26 00:44:30
【问题描述】:
我有一个拖放 GUI 功能,可以显示文件名并提供文件路径。我正在尝试将该文件路径插入 Pandas 以便稍后进行操作。我的问题是python试图在用户将文件放入函数之前打开路径。我如何告诉它等到用户输入数据后再编译。下面是我正在使用的代码,并将其缩小到我认为的问题所在。如果你能告诉我如何将函数变成一个类,这样我就不必编辑每个输入框的函数了。
import pandas as pd
import numpy as np
import docx
import os
import zipfile
import re
import PyPDF2
from docx2pdf import convert
import csv
from math import *
from pathlib import Path
import statistics
import matplotlib.pyplot as plt
from scipy.stats import linregress, stats
from tkinter import *
from tkinterdnd2 import *
from docx2pdf import convert
root = TkinterDnD.Tk()
root.title('Pathfinder')
root.geometry('600x400')
root.config(bg='#039dfc')
def drop(event):
var.set(event.data)
stringvar = str(event.data)
size = len(stringvar)
res = [] # list of file paths
name = ""
idx = 0
while idx < size:
if stringvar[idx] == "{":
j = idx + 1
while stringvar[j] != "}":
name += stringvar[j]
j += 1
res.append(name)
name = ""
idx = j
elif stringvar[idx] == " " and name != "":
res.append(name)
name = ""
elif stringvar[idx] != " ":
name += stringvar[idx]
idx += 1
if name != "":
res.append(name)
file_paths = res
current_e_box_item = set(e_box.get())
for file_path in file_paths:
if file_path.endswith(".XLS"):
path_object = Path(file_path)
file_name = path_object.name
if file_name not in current_e_box_item:
e_box.insert("end", file_name)
e_box.delete(0,last=size)
print(file_name)
print (res)
print(file_path)
print(path_object)
print(stringvar)
return file_path # this is what i want
var = StringVar()
e_box = Entry(root, textvar=var)
e_box.place(x=150, y=90, width=180, height=25)
e_box.drop_target_register(DND_FILES)
e_box.dnd_bind('<<Drop>>', drop)
File_as_DF = pd.read_excel(file_path) # This is where it needs to go
def drop2(event):
var2.set(event.data)
stringvar2 = str(event.data)
print (stringvar2)
var2 = StringVar()
e_box2 = Entry(root, textvar=var2)
e_box2.place(x=150, y=150, width=180, height=25)
e_box2.drop_target_register(DND_FILES)
e_box2.dnd_bind('<<Drop>>', drop2)
def drop3(event):
var3.set(event.data)
stringvar3 = str(event.data)
print(stringvar3)
var3 = StringVar()
e_box3 = Entry(root, textvar=var3)
e_box3.place(x=150, y=200, width=180, height=25)
e_box3.drop_target_register(DND_FILES)
e_box3.dnd_bind('<<Drop>>', drop3)
root.mainloop()
【问题讨论】:
-
删除
File_as_DF = pd.read_excel(file_path)行。无论如何,您没有对File_as_DF值做任何事情。当您构建程序的其余部分时,您会希望从drop()事件中开始执行任何操作。 -
我们真的需要所有这些导入来重现这个问题吗?
-
Bryan Oakley,您的评论不是答案,也没有帮助。
标签: python pandas function class tkinter