tkinter从lambda函数捕获值

托马斯·韦斯特

我正在努力解决这个问题。

说我有这样的代码:

def get_input(data_A, data_B):
    all_data = [data_A.get(),dataB.get()]
    return(all_data)

def the_gui():
    root = Tk()
    data_A = Entry(root)
    data_B = Entry(root)
    button = Button(root, text='Submit', command=lambda: get_input(data_A, data_B))
    mainloop()

我的目标是在单击“提交”按钮后获取data_A和data_B的值。我尝试使用全局变量和其他所有方法,但一直未能抓住价值。

唯一有效的方法是将整个get_input()函数放入the_gui()函数中。但是,我认为这不是实施的好方法。

有什么建议?

迈克-SMT

这是一个简单的示例,说明如何编写此代码以获得所需的结果。

  1. 使用global时,所有的根窗口和相关字段都在一个函数中。因此,您必须在两个函数中都定义全局,这不是您想要执行的操作。

  2. 通常,您将要在全局名称空间中而不是在函数中写入根窗口,或者将其写入类中,这样就可以避免使用global。

  3. button = Button(...)可能没有按照您的想法去做。单击该命令后不会从命令返回值。Tkinter按钮不关心返回任何东西。因此,您必须在其他位置记录该值。

  4. 我不确定您的代码如何工作,因为您没有使用几何管理器,因此mainloop()应该将其附加到根窗口,因此我也将其添加到其中。

范例1:

import tkinter as tk


def get_input():
    global a_and_b
    a_and_b = [data_a.get(), data_b.get()]
    # If you want to keep a running record of all values submitted
    # then you can do this instead:
    # a_and_b.append([data_a.get(), data_b.get()])

def print_a_b():
    print(a_and_b)


root = tk.Tk()
a_and_b = []

data_a = tk.Entry(root)
data_b = tk.Entry(root)
data_a.pack()
data_b.pack()

tk.Button(root, text='Submit', command=get_input).pack()
tk.Button(root, text='Print A/B List', command=print_a_b).pack()
root.mainloop()

示例2使用OOP:

import tkinter as tk


class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.a_and_b = []
        self.data_a = tk.Entry(self)
        self.data_b = tk.Entry(self)
        self.data_a.pack()
        self.data_b.pack()

        tk.Button(self, text='Submit', command=self.get_input).pack()
        tk.Button(self, text='Print A/B List', command=self.print_a_b).pack()

    def get_input(self):
        self.a_and_b = [self.data_a.get(), self.data_b.get()]

    def print_a_b(self):
        print(self.a_and_b)


if __name__ == '__main__':
    App().mainloop()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Lambda函数-按值捕获

来自分类Dev

通过值捕获lambda

来自分类Dev

c ++ lambda:求和函数:使用按值捕获和按引用捕获返回不同的结果

来自分类Dev

lambda函数通过值捕获c ++重置其值,为什么?

来自分类Dev

C ++ Lambda按值捕获

来自分类Dev

C ++ Lambda值无法捕获

来自分类Dev

C ++ lambda不会在按值捕获的成员上调用析构函数

来自分类Dev

为什么循环中的此lambda函数未按值捕获参数?

来自分类Dev

返回带有移动捕获的lambda函数

来自分类Dev

返回lambda捕获函数参数参考

来自分类Dev

C ++ Lambda-如何捕获函数参数

来自分类Dev

如何在lambda中捕获函数结果?

来自分类Dev

在AWS Lambda python函数中捕获异常

来自分类Dev

函数和非捕获 lambda 之间的区别

来自分类Dev

捕获列表中的C ++ lambda复制值

来自分类Dev

在lambda中,如何通过值捕获引用

来自分类Dev

在创建lambda时捕获变量的值

来自分类Dev

Lambda通过引用捕获右值引用

来自分类Dev

在lambda中,如何通过值捕获引用

来自分类Dev

如何在带有访问者的lambda中调用std :: visit,访问者是按值捕获的函数对象

来自分类Dev

在Tkinter的'command ='中使用lambda函数。

来自分类Dev

Tkinter命令Lambda函数修改变量

来自分类Dev

Lambda捕获列表:如果不捕获整个对象就无法按值捕获对象的成员字段?

来自分类Dev

Lambda捕获列表:如果不捕获整个对象就无法按值捕获对象的成员字段?

来自分类Dev

C ++ lambda构造函数参数可以捕获构造的变量吗?

来自分类Dev

用于函数绑定的c ++ 14 Variadic lambda捕获

来自分类Dev

如何在带有捕获的函数中传递lambda?

来自分类Dev

为什么我不能捕获C ++中的递归lambda函数?

来自分类Dev

在lambda函数中捕获和传递参数之间的区别

Related 相关文章

  1. 1

    Lambda函数-按值捕获

  2. 2

    通过值捕获lambda

  3. 3

    c ++ lambda:求和函数:使用按值捕获和按引用捕获返回不同的结果

  4. 4

    lambda函数通过值捕获c ++重置其值,为什么?

  5. 5

    C ++ Lambda按值捕获

  6. 6

    C ++ Lambda值无法捕获

  7. 7

    C ++ lambda不会在按值捕获的成员上调用析构函数

  8. 8

    为什么循环中的此lambda函数未按值捕获参数?

  9. 9

    返回带有移动捕获的lambda函数

  10. 10

    返回lambda捕获函数参数参考

  11. 11

    C ++ Lambda-如何捕获函数参数

  12. 12

    如何在lambda中捕获函数结果?

  13. 13

    在AWS Lambda python函数中捕获异常

  14. 14

    函数和非捕获 lambda 之间的区别

  15. 15

    捕获列表中的C ++ lambda复制值

  16. 16

    在lambda中,如何通过值捕获引用

  17. 17

    在创建lambda时捕获变量的值

  18. 18

    Lambda通过引用捕获右值引用

  19. 19

    在lambda中,如何通过值捕获引用

  20. 20

    如何在带有访问者的lambda中调用std :: visit,访问者是按值捕获的函数对象

  21. 21

    在Tkinter的'command ='中使用lambda函数。

  22. 22

    Tkinter命令Lambda函数修改变量

  23. 23

    Lambda捕获列表:如果不捕获整个对象就无法按值捕获对象的成员字段?

  24. 24

    Lambda捕获列表:如果不捕获整个对象就无法按值捕获对象的成员字段?

  25. 25

    C ++ lambda构造函数参数可以捕获构造的变量吗?

  26. 26

    用于函数绑定的c ++ 14 Variadic lambda捕获

  27. 27

    如何在带有捕获的函数中传递lambda?

  28. 28

    为什么我不能捕获C ++中的递归lambda函数?

  29. 29

    在lambda函数中捕获和传递参数之间的区别

热门标签

归档