【问题标题】:Python: Button to reset a label to zeroPython:将标签重置为零的按钮
【发布时间】:2018-04-04 04:45:22
【问题描述】:

我正在尝试计算价格总和,但我无法让我的重置功能使总价格回到 0 美元。保存该值的实际变量重置为零。我只需要重置标签。正在使用 tkinter。

from tkinter import *
root = Tk()
root.title("QTouch 10")
global total, count
total = 0
count = StringVar()

--我用过的不涉及的东西列表--

amount = Label(root, textvariable=count)
count.set("$--") 

def res():
    total = 0
    **count.set("$--")**
    for n in names:
        names[names.index(n)][3] = 0
    label = Label(root, text="0").grid(row=names.index(n)+1, column=4)  


amount.grid(row=10, column=4)

reset = Button(root, text="Reset", command=lambda *args: res()).grid(row=10, 
column=1)

【问题讨论】:

  • 我认为您想创建一次标签,然后让按钮更新它 - 而不是让按钮在每次单击时都创建一个新标签。
  • names 是否在调用 res 时发生变化?如果名称是恒定的,我不会在 res 中创建 Label,创建该标签一次,然后只更新现有标签。
  • 这就是我想要改变的。我不想在旧标签上制作新标签,而是要编辑唯一的标签。但我遇到了对象错误问题,似乎无法编辑标签。

标签: python tkinter label


【解决方案1】:

这是我从您的代码中创建一个最小示例的返工。我删除了与names 相关的所有逻辑,因为它不是所述问题的一部分并且不完整(names 未定义。)我设置了total 和@ 的初始值987654324@ 到 $10 并让 res() 将其重置为 0:

from tkinter import *

root = Tk()

total = 10
count = StringVar()
amount = Label(root, textvariable=count)
count.set("$10")

def res():
    global total
    total = 0
    count.set("$0")

amount.grid(row=10, column=4)

Button(root, text="Reset", command=res).grid(row=10, column=1)

root.mainloop()

这似乎按预期工作。

注意事项:您的解释是"$0",但您的代码是"$--";您似乎不了解 global 关键字的作用;您通过 lambda 添加了一个可能不需要存在的间接层。

【讨论】:

  • 您能解释一下 lambda 在按钮命令中的作用吗?
  • @Paral,command 参数指向一个函数。在这种情况下,我将它指向res 函数。有时,command 想要传递的参数与函数期望的参数不匹配。在这种情况下,lambda 可以用来克服这种不匹配,方法是看起来接受一个参数列表但用另一个参数列表调用函数。在这种情况下使用lambda 可能还有其他原因。
猜你喜欢
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多