引用动态创建的按钮tkinter的函数迭代

时间:2016-11-22 19:18:58

标签: function tkinter dynamically-generated

我已动态创建按钮并将其设置为调用脚本函数,因此在单击Test 1时会执行script_1,同样Test 2执行script_2等等... 但是,点击Test 1Test 2时会执行script_0。看起来val = i.get()每次都返回值0。有没有办法获得当前的i value

功能

def script():
    if running:
        i = IntVar()
        val = i.get()
        subprocess.Popen(['python', 'script_' + str(val) + '.py'])
    root.update()

按钮

for i in range(3):
    button.append(tk.Button(root, text="Test " + str(i + 1), font=(None, 16), command=lambda i=i: script()))
    button[-1].grid(column=0, row=i + 1)

1 个答案:

答案 0 :(得分:1)

那是因为您之前初始化了UserResource.save(user, function(user){ this.saveToken(user.token); deferred.resolve(user); }, function(user){ deferred.reject(user); }); 行,并且IntVar始终初始化为0.您需要将i作为参数传递给您的脚本:

i

这对我来说分别正确popens script_0.py,1,2。考虑将root包装在类中作为良好实践(有些人喜欢继承Tk),并使按钮成为from Tkinter import Button, IntVar, Tk import subprocess def script(i): subprocess.Popen(['python', 'script_' + str(i) + '.py']) root.update() root = Tk() button = [] for i in range(3): button.append(Button(root, text="Test " + str(i + 1), font=(None, 16), command=lambda i=i: script(i))) button[-1].grid(column=0, row=i + 1) root.mainloop() 的一部分。