【问题标题】:tkinter and configparser : looking for a more beautiful solutiontkinter 和 configparser :寻找更漂亮的解决方案
【发布时间】:2013-12-07 21:34:28
【问题描述】:

我想使用config.ini 的值作为 Tkinter Entry 项的启动值。 程序完成后,我想将这些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 参数链接起来?

【问题讨论】:

    标签: python tkinter configparser


    【解决方案1】:

    只要 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)
    

    也许您也可以将此功能分配给closing event 以在用户使用关闭按钮 [X] 时保存配置。

    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'))
    

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      相关资源
      最近更新 更多