【问题标题】:How do I use a for loop to give my buttons a function?如何使用 for 循环为按钮赋予功能?
【发布时间】:2017-10-03 20:20:34
【问题描述】:

所以我想使用 for 循环在 Tkinter 中为我的按钮提供功能。当我这样做时,我得到一个错误消息,这些按钮没有定义。我尝试了几件事,但无论如何我都没有工作。如果你能帮助我,我会很高兴。顺便说一句,它是一个计算器。

这是循环的样子:

for s in range(0, 10):
    def add_(s):
         entry_box.insert(1000, str(number))

这就是我制作按钮的方式:

button_zero = Button(main_window, text='0', padx=30, pady=25, command=add_0)
button_zero.place(x=67,y=430)

【问题讨论】:

    标签: python for-loop button tkinter calculator


    【解决方案1】:

    如果你有 10 个按钮 (0-9) 都在 entry_box 中插入一个数字,我会创建一个函数工厂。

    def add_(s):
        def wrapped():
            entry_box.insert(1000, s)
        return wrapped
    

    当您调用add_(2) 时,您会得到一个函数作为返回值,该函数在调用时会将2 添加到输入框。

    add_2 = add_("2")
    add_2()  # adds 2 to the entry box, returns None
    

    然后您可以遍历您的按钮并为每个按钮分配一个命令。

    for i, button in enumerate([button_zero, button_one, button_two, ...]):
        button.configure(command=add_(str(i)))
    

    【讨论】:

    • 既然可以使用python中已经包含的函数工厂,为什么还要创建一个函数工厂:functools.partial
    • @Novel 主要是个人喜好。 functools.partial 并没有为我节省多少程序员时间,但确实意味着我必须记住导入 functools! YMMV,真的一点都不影响最终的代码。
    【解决方案2】:

    根据您提供的信息,按钮中的命令参数不等于任何已定义的函数。也许只是一个错字:

    for s in range(0,10):
        def add_0(s):
            entry_box.insert(1000,str(number))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 2022-07-20
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多