问题出现在save函数中,我直接运行会在exec ('event' + str (times) + '.destroy ()')中报错NameError: name 'event0' is not defined,我又尝试把exec换掉,直接用原语句的第一个变量event0使用控件,不报错了说明原语句生成的变量不是event0,可在exec ('event' + str (times) + '.destroy ()')中它又能去找event0,不知道问题出在哪里。
我又测试一下:用exec好像可以创建连续变量并可以对其作出改变,那为什么之前不行呢,是不是tkinter的问题
for i in range (5):
exec ('list' + str (i) + ' = [45,46]')
exec ('list' + str (i) + '.append (46 + ' + str (i) + ')' )
print (list0)
print (list1)
print (list2)
print (list3)
print (list4)
求援助!
副代码:
import tkinter
def add ():
global text_entry, save_button
text_entry = tkinter.Entry (main_window)
text_entry.place (x = 70, y = 10, width = 500, height = 30)
save_button = tkinter.Button (main_window, text = 'save_button', command = lambda: save (text_entry.get ()))
save_button.place (x = 580, y = 10, width = 50, height = 30)
def save (text):
global event_list, event_y, event0
text_entry.destroy ()
save_button.destroy ()
for times in range (0, len (event_list), 1):
exec ('event' + str (times) + '.destroy ()')
time.sleep (2)
event_list.append (text)
for times in range (0, len (event_list), 1):
print (str (times))
exec ('event' + str (times) + ' = tkinter.Button (main_window, text = event_list [' + str (times) + '], command = lambda: delete (' + str (times) + '))')
exec ('event' + str (times) + '.place (x = 10, y = ' + str (event_y) + ', width = 620, height = 30)')
#event0 = tkinter.Button (main_window, text = event_list [times], command = lambda: delete (times))
#event0.place (x = 10, y = event_y, width = 620, height = 30)
event_y = event_y + 50
event_y = 50
def delete (times):
print (times)
event_list = []
event_y = 50
main_window = http://tkinter.Tk ()
main_window.title ('main_window')
main_window.geometry ('640x200')
#main_window.resizable (0, 0)
add_button = tkinter.Button (main_window, text = 'add_button', command = add)
add_button.place (x = 10, y = 10, width = 50, height = 30)
main_window.mainloop ()
save函数中
global event_list, event_y, event0
只声明了event0为全局变量
用 exec ('event' + str (times) + ' = tkinter.Button (main_window, text = event_list [' + str (times) + '], command = lambda: delete (' + str (times) + '))')
创建的event1、event2都是函数内的局部变量。出了函数就被销毁了。
你不要用exec创建变量,应该用一个列表来保存所有的tkinter.Button对象