Tkinter:尝试从按钮

时间:2016-12-15 16:33:39

标签: python-3.x tkinter

我不知道如何解决我的问题我有一个看起来像这样的代码:

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])

为了在我的程序中的其他地方使用我的结果

我也知道我可以上课,但老师不希望我们为该项目使用课程......

你有什么想法吗?

3 个答案:

答案 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))中的lambdareturn [y,z]中的f(x)。您必须将Entry的字符串转换为intfloat

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(或更深奥的东西)。