首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从tkinter输入框中获取值并在Pandas中使用

如何从tkinter输入框中获取值并在Pandas中使用
EN

Stack Overflow用户
提问于 2020-11-26 17:17:11
回答 1查看 66关注 0票数 1

我正在尝试开发一个工具,用Python中的tkinter和pandas过滤大型csv文件。下面是我的代码:

代码语言:javascript
运行
复制
# %%
from tkinter import *
from tkinter import filedialog
import pandas as pd
root = Tk()
# %%
root.title('Test')
root.geometry("+400+280")

# filter1
label1 = Label(root, text='营运处: ', font=('宋体',10))
label1.grid(row=0,column=0)
var1 = StringVar()
entry1 = Entry(root, show=None, textvariable=var1, font=('宋体',10))
entry1.grid(row=0,column=1)
area_str = entry1.get()
area_list = area_str.split(' ')
# filter2
label2 = Label(root, text='采销部: ', font=('宋体',10))
label2.grid(row=1,column=0)
var2 = StringVar()
entry2 = Entry(root, show=None, textvariable=var2, font=('宋体',10))
entry2.grid(row=1,column=1)
dept_str = var2.get()
dept_list = dept_str.split(' ')
# filter3
label3 = Label(root, text='品牌标识: ', font=('宋体',10))
label3.grid(row=2,column=0)
var3 = StringVar()
entry3 = Entry(root, show=None, textvariable=var3, font=('宋体',10))
entry3.grid(row=2,column=1)
brd_id = var3.get()

# %%
def select_file():
    global filename
    filename = filedialog.askopenfilename(
        filetype=(('csv files','*.csv'),('all files','*.*'))
    )
    return filename
def save_file():
    filepath = filedialog.asksaveasfilename()
    return filepath
def query():
    global dfa
    df = pd.read_csv(r'%s'%(select_file()), dtype='str')
    df.rename(columns={'x.ekgnam':'dept'}, inplace=True)
    filter1 = df.zdiqu.isin(area_list)
    filter2 = df.dept.isin(dept_list)
    filter3 = df['brand_id']==brd_id
    dfa = df[filter1 & filter2 &filter3]
def output():
    dfa.to_excel(r'%s'%(save_file()),index=False)
# %%
button1 = Button(root, text='选择文件执行查询', font=('宋体',10), command=query)
button1.grid(row=4,column=0)
button2 = Button(root, text='查询结果导出', font=('宋体',10), command=output)
button2.grid(row=4,column=1)
button3 = Button(root, text='完成', font=('宋体',10), command=root.quit)
button3.grid(row=4,column=2)
# run
root.mainloop()

我不知道为什么,但是输出的xlsx文件中没有任何内容。如果我手动将相同的过滤器放入Excel中,会有一些输出。我猜可能是text变量没有获得entry中的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-26 17:40:08

.get()函数不是指向条目的动态链接,您必须再次调用它才能提取当时条目中的内容。除此之外,我可能会建议你重写一下代码,因为它使用了大量的全局变量,并且可以使用面向对象的方法。此外,通常应避免将tkinter名称空间直接导入到脚本中,因为这有时可能会导致名称冲突。相反,像import tkinter as tk一样导入

尝试下面的脚本,

代码语言:javascript
运行
复制
import tkinter as tk
from tkinter import filedialog
import pandas as pd


class FileSelector:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('Test')
        self.root.geometry('+400+280')

        self.var1 = tk.StringVar()
        self.var2 = tk.StringVar()
        self.var3 = tk.StringVar()

        self.make_widgets()

        # run
        self.root.mainloop()

    def make_widgets(self):
        # filter1
        tk.Label(self.root, text='营运处: ', font=('宋体',10)).grid(row=0,column=0)
        tk.Entry(self.root, show=None, textvariable=self.var1, font=('宋体',10)).grid(row=0,column=1)

        # filter2
        tk.Label(self.root, text='采销部: ', font=('宋体',10)).grid(row=1,column=0)
        tk.Entry(self.root, show=None, textvariable=self.var2, font=('宋体',10)).grid(row=1,column=1)

        # filter3
        tk.Label(self.root, text='品牌标识: ', font=('宋体',10)).grid(row=2,column=0)
        tk.Entry(self.root, show=None, textvariable=self.var3, font=('宋体',10)).grid(row=2,column=1)

        # buttons
        tk.Button(self.root, text='选择文件执行查询', font=('宋体', 10), command=self.query).grid(row=4, column=0)
        tk.Button(self.root, text='查询结果导出', font=('宋体', 10), command=self.output).grid(row=4, column=1)
        tk.Button(self.root, text='完成', font=('宋体', 10), command=self.root.quit).grid(row=4, column=2)

    @staticmethod
    def select_file():
        filename = filedialog.askopenfilename(
            filetype=(('csv files','*.csv'),('all files','*.*'))
        )
        return filename

    @staticmethod
    def save_file():
        filepath = filedialog.asksaveasfilename()
        return filepath

    def query(self):
        df = pd.read_csv(r'%s'%(self.select_file()), dtype='str')
        df.rename(columns={'x.ekgnam':'dept'}, inplace=True)

        area_list = self.var1.get().split(' ')
        dept_list = self.var2.get().split(' ')
        brd_id = self.var3.get()

        filter1 = df.zdiqu.isin(area_list)
        filter2 = df.dept.isin(dept_list)
        filter3 = df['brand_id'] == brd_id
        return df[filter1 & filter2 & filter3]

    def output(self):
        dfa = self.query()
        dfa.to_excel(r'%s'%(self.save_file()),index=False)


FileSelector()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65019099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档