我想将config.ini
的值用作Tkinter Entry项的启动值。
程序完成后,我想将这些条目的内容写入config.ini
。
我有以下代码的2个问题:
# create the Entry textboxes
e1 = Entry(f1); e1.grid(row=1,column=1,sticky=W)
e2 = Entry(f1); e2.grid(row=2,column=1,sticky=W)
e3 = Entry(f1); e3.grid(row=3,column=1,sticky=W)
# fill them with content from config.ini file
import ConfigParser
config = ConfigParser.ConfigParser()
config.read('config.ini')
e1.insert(0, config.get('Default','Param1'))
e2.insert(0, config.get('Default','Blah7'))
e3.insert(0, config.get('Default','Param3'))
tk.mainloop()
# save the Entry values to config.ini
config.set('Default', 'Param1', e1.get())
config.set('Default', 'Blah7', e2.get())
config.set('Default', 'Param3', e3.get())
config.write(open('config.ini','w'))
第一个问题:tk.mainloop()
完成后,e1.get()
不再有效!
第二个问题:在代码中两次重复相同的事情并不是那么美好(一次用于阅读,一次用于写入)。也许有一种方法可以用更短的方式将条目与config.ini
参数链接起来?
答案 0 :(得分:2)
只要mainloop工作,程序(和所有小部件)就存在 - 不仅在tkinter中,而且在wxpython,pygame等中。当mainloop完成工作时,它会销毁所有小部件和窗口。你必须在mainloop之前保存配置。
您可以添加带有辅助功能的按钮quit
,该功能可以保存配置,而不是关闭程序。
(未经过测试的代码)
def saveConfig():
global config
config.set('Default', 'Param1', e1.get())
config.set('Default', 'Blah7', e2.get())
config.set('Default', 'Param3', e3.get())
config.write(open('config.ini','w'))
root.quit()
Button(root, "QUIT", command=saveConfig)
当用户使用关闭按钮[X]时,也许您还可以将此功能分配给closing event
以保存配置。
root.protocol("WM_DELETE_WINDOW", saveConfig)
代码读取配置和代码写入配置不相同。没有更短的路。
你只能使用列表和for
循环来加载/保存“更好”:)
entries = []
options = []
entries.append(Entry(f1)); entries[-1].grid(row=1,column=1,sticky=W)
options.append("Param1")
entries.append(Entry(f1)); entries[-1].grid(row=2,column=1,sticky=W)
options.append("Blah7")
entries.append(Entry(f1)); entries[-1].grid(row=3,column=1,sticky=W)
options.append("Param3")
# load
import ConfigParser
config = ConfigParser.ConfigParser()
config.read('config.ini')
for index, e in enumerate(entries):
e.insert(0, config.get("Default", options[index]) )
# save
for index, e in enumerate(entries):
config.set("Default", options[index], e.get())
config.write(open('config.ini','w'))