Button Click上的Tkinter lambda增量IntVar

时间:2015-10-27 16:56:15

标签: python button lambda tkinter

问题集

我想创建一个可以通过3个操作操作的Counter小部件:

  • 通过编辑tk.Entry-Textvariable
  • 中的数据来修改绑定tk.Entry-Widget
  • 点击条目
  • 右侧的ttk.Button来增加变量
  • 点击条目
  • 左侧的ttk.Button来减少变量

当前代码



    #!/usr/bin/env python2
    # -*- encoding: utf-8 -*-
    import Tkinter as tk
    import ttk

    counter=tk.IntVar()

    def printerCounterWidget(master):
        """
        This will specify the appearance of the PrintCounter
        """

        #Create the UI
        __frame = ttk.Frame(master)
        __frame.grid()

        global counter
        ####################################################################
        ttk.Button(__frame, text="-", command=lambda: counter.set( counter.get() - 1 ) ).grid(row=0, column=0)
        ####################################################################

        ttk.Entry(__frame, textvariable=counter).grid(row=0, column=1)

        ####################################################################
        ttk.Button(__frame, text="+", command=lambda: counter.set( counter.get() + 1 ) ).grid(row=0, column=2)
        ####################################################################

    if __name__=="__main__":
        app=tk.Tk()
        ttk.Label(app, text="printerCounterWidget").grid()
        printerCounterWidget(app)
        app.mainloop()

不幸的是我没有管理(至少还有)让lambda表达式工作。

知道当前的调用永远不会在声明时被调用。

有人能指出我正确设置lambda表达式的方向吗?

1 个答案:

答案 0 :(得分:0)

好的,那不长。在lambdas附上了冒号之后我找到了这个问题。

counter = tk.IntVar()在全局版本中不起作用。 将它放入函数解决了它。



    def printerCounterWidget():
        [...]
        counter=tk.IntVar() # removed "global counter"
        [...]