首页 > 解决方案 > 在 tkinter 中接受 lambda 表达式作为用户的输入

问题描述

我正在使用tkinter为预处理脚本创建一个接口,该脚本将接受用户输入并pandas相应地过滤数据框。下面的代码片段接受来自用户的简单函数,并打印结果。

代码:-

import tkinter as tk
import pandas as pd

root = tk.Tk()


entry1 = tk.Entry(root, width=50)
entry1.pack()


def demo_func(f):
    tmp = pd.DataFrame({"x": [1, 2, 3, 4, 5], "y": [1, 2, 3, 4, 5]})
    return tmp.apply(f, axis=1)


def myclick():
    text = entry1.get()
    func = eval(f"lambda x: {text}")
    mylabel = tk.Label(root, text=demo_func(func))
    mylabel.pack()


mybutton = tk.Button(root, text="Enter", command=myclick)
mybutton.pack()
root.mainloop()

结果 :-

在此处输入图像描述

我希望能够输入允许用户在特定列上指定操作的表达式,例如f'The new value of column x is {x["x"] ** 2}'.

如果我在输入框中输入表达式,我会收到以下错误:- 在此处输入图像描述

预期结果(通过硬编码值获得):

在此处输入图像描述

有没有更好的方法来做我想做的事情?任何帮助,将不胜感激。谢谢你。

标签: python-3.xtkinter

解决方案


推荐阅读