【问题标题】:Tkinter lambda increment IntVar on Button Click按钮单击时的 Tkinter lambda 增量 IntVar
【发布时间】:2015-10-27 16:56:14
【问题描述】:

问题集

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

  • 通过编辑tk.Entry-Widget内的数据编辑绑定tk.Entry-Textvariable
  • 通过单击条目右侧的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 表达式的方向吗?

【问题讨论】:

  • 你少了一个冒号:lambda: counter...
  • 完全正确! sry4那个错字!我编辑了问题
  • 你为什么在这里使用 lambda,而不是创建一个合适的函数? Lambda 使代码更难编写、阅读和维护。
  • Bryan:这个“小部件”应该稍后在 TkinterTreectrl 视图中使用。对于我来说,基于事件发送者的识别,我更喜欢 lambda 而不是正确的回调,在树中拥有 > 20 000 个数据集(行)需要太长时间。如果您知道一个合适的解决方案,我将很高兴:-)

标签: python button lambda tkinter


【解决方案1】:

好的,时间不长。在 lambda 附加了冒号后,我发现了问题。

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



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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2014-07-17
    相关资源
    最近更新 更多