我不知道如何解决我的问题我有一个看起来像这样的代码:
def f(x):
x=x.get()
y=x**2
z=x-1
Mylist=[]
x=Entry(master)
cmd=lambda x=x : f(x)
Button(master, text="Ok", command=cmd).pack()
我想做的是像
Mylist.append([y,z])
为了在我的程序中的其他地方使用我的结果
我也知道我可以上课,但老师不希望我们为该项目使用课程......
你有什么想法吗?
答案 0 :(得分:2)
将命令附加到按钮的重点是实现问题的答案"当我点击按钮时我想要发生什么?"。在你的情况下,答案是"我希望它a)从条目小部件中获取值,b)计算新值,以及c)将其附加到列表中#34;。
因此,编写一个执行此操作的函数,然后从按钮调用该函数。在这种情况下,您不需要lambda,因为按钮和条目小部件之间的关系为1:1。 lambda本身并没有什么问题,但在这种情况下,它增加了复杂性而没有提供任何价值,因此我建议不要使用它。通过不使用lambda,代码将更容易调试和维护,因为很难设置断点或在lambda中添加其他功能。
例如:
def f(x):
y=x**2
z=x-1
def do_calculation():
x_value = float(x.get())
result = f(x_value)
my_list.append(result)
...
tk.Button(..., command=do_calculation)
答案 1 :(得分:1)
使用append(f(x))
中的lambda
和return [y,z]
中的f(x)
。您必须将Entry
的字符串转换为int
或float
。
import tkinter as tk
# --- functions ---
def f(x):
x = int(x.get()) # convert string to int (or float)
y = x**2
z = x-1
return [y, z]
# --- main ---
my_list = []
master = tk.Tk()
e = tk.Entry(master)
e.pack()
cmd = lambda x=e:my_list.append(f(x))
tk.Button(master, text="Ok", command=cmd).pack()
master.mainloop()
print(my_list)
您可以在lambda中转换x
,然后f(x)
只能进行数学计算
编辑:@ TadhgMcDonald-Jensen在评论中注明的更正版本。
def f(x):
return [x**2, x-1]
#cmd = lambda x=int(e.get()):my_list.append(f(x)) # wrong version
cmd = lambda:my_list.append(f(int(e.get()))) # correect version
答案 2 :(得分:0)
您知道点击该按钮将执行cmd
,因此请将您想要的任何内容(包括附加到列表中)放入其中。请注意,这意味着要么将cmd
更改为lambda
,要么将此功能添加到f
(或更深奥的东西)。