Python 3.x Python:tkinter:将变量传递给函数

Python 3.x Python:tkinter:将变量传递给函数,python-3.x,tkinter,Python 3.x,Tkinter,我试图将变量传递给更新屏幕小部件的函数。以下代码起作用: import tkinter as tk import random`` def update(): l.config(text=str(random.random())) root.after(1000, update) root = tk.Tk() l = tk.Label(text='0') l.pack() update() root.mainloop() 然而,如果我试图传递一个变量,它就不起作用 impo

我试图将变量传递给更新屏幕小部件的函数。以下代码起作用:

import tkinter as tk
import random``

def update():
    l.config(text=str(random.random()))
    root.after(1000, update)

root = tk.Tk()
l = tk.Label(text='0')
l.pack()
update()
root.mainloop()
然而,如果我试图传递一个变量,它就不起作用

import tkinter as tk
import random

def update(a):
    l.config(text=str(random.random() + a))
    root.after(1000, update)

root = tk.Tk()
l = tk.Label(text='0')
l.pack()
a=1
update(a)
root.mainloop()
屏幕上会出现以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1541, in __call__
    return self.func(*args)
  File "/usr/lib/python3.4/tkinter/__init__.py", line 590, in callit
    func(*args)
 TypeError: update() missing 1 required positional argument: 'a'
有办法解决这个问题吗?需要传递变量


提前感谢。

如果您正在调用一个接受附加参数的函数,您可以在
之后的
调用中包含这些参数:

root.after(1000, update, a)

如果您正在调用一个接受附加参数的函数,则可以在
之后对
的调用中包含这些参数:

root.after(1000, update, a)

root.after(1000,lambda x=a:update(x))解决了问题,谢谢。@user3822607:这太奇怪了。lambda在不提供任何额外价值的情况下增加了复杂性。不过,如果你喜欢这种方法,那也没什么坏处。不过,如果你喜欢这个答案,请考虑将其标记为所选答案,并可能投票表决。请参阅root。在(1000,lambda x=a:update(x))解决问题后,谢谢。@user3822607:这太奇怪了。lambda在不提供任何额外价值的情况下增加了复杂性。不过,如果你喜欢这种方法,那也没什么坏处。不过,如果你喜欢这个答案,请考虑将其标记为所选答案,并可能投票表决。请看