我要做的事情:用户输入csv、字段名和关键字/短语的文件路径,然后单击提交。。。。返回的是pandas查询的结果,该查询使用从他们想要使用的csv读取的输入进行结构化。
到目前为止我的代码:
# Relevant Python libraries:
import pandas as pd
import csv
import tkinter as tk
fieldname = tk.StringVar()
keyword = tk.StringVar()
csv_file_path = tk.StringVar()
def import_csv_data(self):
?????
?????
df = pd.dataframe(pd.read_csv(csv_file_path)) # not sure this is possible, need to define pandas dataframe somewhere?
def search(self):
print(df[df[fieldname.get()].str.contains(keyword.get()), na=False)]
window = tk.Tk()
window.title("Search CSV")
frm_form = tk.Frame(relief=tk.SUNKEN, borderwidth=3)
frm_form.pack()
labels = [
"CSV File Path:",
"Field Name:",
"Keyword/Phrase:",
]
# Loop over the list of field labels
for idx, text in enumerate(labels):
# Create a Label widget with the text from the labels list
label = tk.Label(master=frm_form, text=text)
# Create an Entry widget
entry = tk.Entry(master=frm_form, width=50)
# Use the grid geometry manager to place the Label and
# Entry widgets in the row whose index is idx
label.grid(row=idx, column=0, sticky="ew")
entry.grid(row=idx, column=1, sticky="ew")
frm_buttons = tk.Frame()
frm_buttons.pack(fill=tk.X, ipadx=5, ipady=5)
btn_submit = tk.Button(master=frm_buttons,
text="Submit", variable = csv_file_path, fieldname, keyword ) # HELP?
#command=lambda:[import_csv_data(self), search(self)]) #define a function and
# insert at top to pull from from CSV and call with "command", bind for simplicity
btn_submit.pack(side=tk.RIGHT, padx=10, ipadx=10)
btn_clear = tk.Button(master=frm_buttons, text="Clear")
btn_clear.pack(side=tk.RIGHT, ipadx=10)
window.mainloop()
我被卡住的地方:定义将执行工作的函数。我不知道如何布置它们。因此,第一个函数是获取csv文件并传递到pandas数据帧中。。。
第二个函数将获取字段名称(列(和关键字,并将其放入如下内容中:
print(df[df["fieldnamehere"].str.contains("thisphraseorkeyword", na=False)]
到目前为止,我在网上发现的还没有一个如何将输入信息输入函数的例子。我一直在努力寻找这种情况,但没有任何运气。我没有能力为一个部分找到相关的例子并将其制作成我自己的,我还没有做到。我还观看了sendex的YouTube教程的前几部分,帮助我走到这一步:https://www.youtube.com/watch?v=oV68QJJUXTU就像这个RealPython教程一样:https://realpython.com/python-gui-tkinter/
这个答案似乎很有帮助,但不一定能在这里应用:https://stackoverflow.com/a/40894757
询问:如果能为熊猫字符串中的功能以及如何获得用户输入提供任何帮助,我们将不胜感激。我为函数所写的只是一种猜测。我不知道如何在函数中使用get((来确保它达到预期效果。我希望这个问题足够好,我已经编辑了一个小时了,哈。
我相信你正在寻找类似的东西
def import_csv_data():
df = pd.DataFrame(pd.read_csv(csv_file_path.get()))
search(df)
def search(df):
print(df[df[fieldname.get()].astype(str).str.contains(keyword.get())])
您需要在定义tk.Tk
之后定义StringVar
,以便定义根。
window = tk.Tk()
window.title("Search CSV")
frm_form = tk.Frame(relief=tk.SUNKEN, borderwidth=3)
frm_form.pack()
csv_file_path = tk.StringVar()
fieldname = tk.StringVar()
keyword = tk.StringVar()
由于您在循环中创建Entry
字段,因此可以使用字典并分配textvariable
labels = {
"CSV File Path:":csv_file_path,
"Field Name:":fieldname,
"Keyword/Phrase:":keyword,
}
for idx, text in enumerate(labels.keys()):
label = tk.Label(master=frm_form, text=text)
entry = tk.Entry(master=frm_form, width=50, textvariable=labels[text])
label.grid(row=idx, column=0, sticky="ew")
entry.grid(row=idx, column=1, sticky="ew")
对于按钮,您可以简单地使用import_csv_data
功能作为命令
btn_submit = tk.Button(master=frm_buttons,
text="Submit",command=import_csv_data)