我已动态创建按钮并将其设置为调用脚本函数,因此在单击Test 1
时会执行script_1
,同样Test 2
执行script_2
等等...
但是,点击Test 1
或Test 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)
答案 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()
的一部分。