在python tkinter中使用和传入变量的问题

时间:2015-07-29 19:00:23

标签: python events tkinter

我正在用tkinter编写一个简单的3D模拟器,我遇到了通过绑定到事件的函数传递参数的问题。

我的功能是

def left(event):


    cam1 = 0
    cam2 = 0
    def render( cam1, cam2):
        w.delete("all")
        cam1 = cam1 + 5
        cam2 = cam2 + 2
        lol = 0
        w.create_rectangle(10+cam1,10+cam1,190+cam1,190+cam1)
        w.create_rectangle(40+cam2,40+cam2,160+cam2,160+cam2)
        w.create_line(10+cam1,10+cam1,40+cam2,40+cam2)
        w.create_line(40+cam2,160+cam2,10+cam1,190+cam1)
        w.create_line(160+cam2,160+cam2,190+cam1,190+cam1)
        w.create_line(190+cam1,10+cam1,160+cam2,40+cam2)
    w.after(10,render(cam1,cam2))

我希望每次调用函数时都能使cam1和cam2不为0,但它不会让我传递更多参数与事件,我使用

w.bind("<Right>", right)

绑定它

1 个答案:

答案 0 :(得分:0)

after来电不正确。您必须为函数提供引用。可以给出其他参数。在你的情况下,它将是:

w.after910, render, cam1, cam2)

至于绑定,最常见的解决方案是使用lambdafunctools.partial。例如:

w.bind("<Right>", lambda event, arg1="something", arg2="something else": right(arg1, arg2))

这个问题的变化已经在stackoverflow上被问了几十次。尝试在此网站上搜索[tkinter] bind argument。您的问题应该标记为重复,但很难知道哪个问题是最好的原始问题。