Python 基于configparser文件的动态小部件创建

Python 基于configparser文件的动态小部件创建,python,dynamic,tkinter,Python,Dynamic,Tkinter,我正在尝试一段基于python的tkinter代码,目标如下: (请通读目标,然后我将举一个例子来解释我到底需要什么,然后最后将发布我所写的脚本) 从使用configparser模块实现的配置文件中读取 根据从该文件读取的选项,它会自动生成小部件 到目前为止,这些小部件仅限于标签和输入框 每个输入框都与一个变量相关联。因此需要生成一个变量 每当声明输入框时自动执行 现在,当用户在输入框中输入任何值并按下“计算”按钮时,将显示一个列表 由用户输入的值组合生成(以特定格式) 例如: 让configp

我正在尝试一段基于python的tkinter代码,目标如下: (请通读目标,然后我将举一个例子来解释我到底需要什么,然后最后将发布我所写的脚本)

  • 从使用configparser模块实现的配置文件中读取
  • 根据从该文件读取的选项,它会自动生成小部件
  • 到目前为止,这些小部件仅限于标签和输入框
  • 每个输入框都与一个变量相关联。因此需要生成一个变量 每当声明输入框时自动执行
  • 现在,当用户在输入框中输入任何值并按下“计算”按钮时,将显示一个列表 由用户输入的值组合生成(以特定格式)
  • 例如: 让configparser文件具有以下内容:

    [小部件]

    标签=ani_标签,sham_标签

    入口=ani,假

    为此案例生成的列表如下所示:

    out_list=['-ani',','-sham','']

    表示存储在ani变量中的值 下面是我尝试过的代码

    from Tkinter import *
    from Tkinter import Tk
    import Tkinter as tk
    import ttk
    import ConfigParser
    import sys
    ############ Initialize ###############################
    parser_read = ConfigParser.ConfigParser()
    parser_read.read('option_read.config')
    config_list = {}
    config_list['label'] = parser_read.get('widget','label').split(',')
    config_list['entry'] = parser_read.get('widget','entry').split(',')
    
    
    ######
    def calculate():
        #Will include the list generation part
        pass
    
    
    #######
    root = Tk()
    root.title("NRUNTEST GUI VERSION 1")
    #
    menuframe = ttk.Frame(root)
    menuframe.grid(column=0,row=0)
    menuframe.columnconfigure(0,weight=1)
    menuframe.rowconfigure(0,weight=1)
    #
    mainframe_label = ttk.Frame(root)
    mainframe_label.grid(column=1,row=0)
    mainframe_label.columnconfigure(0,weight=1)
    mainframe_label.rowconfigure(0,weight=1)
    #
    mainframe_entry = ttk.Frame(root)
    mainframe_entry.grid(column=2,row=0)
    mainframe_entry.columnconfigure(0,weight=1)
    mainframe_entry.rowconfigure(0,weight=1)
    
    
    #
    general_label= Label(menuframe,text="Please Enter the Values Below").grid(column=1,row=0,sticky=(E))
    compiler_label= ttk.Label(menuframe,text="Compiler")
    compiler_label.grid(column=1,row=1,sticky=W)
    #
    calculate_button = ttk.Button(menuframe, text="Calculate", command=calculate).grid(column=1,row=2,sticky=(W,E))
    #Automatic Widget declaration ###
    for x in config_list['label']:
        x = ttk.Label(mainframe_label,text=x).grid()
    
    for x in config_list['entry']:
        #print x
    var = lambda: sys.stdout.write(x)
    x = ttk.Entry(mainframe_entry,textvariable = x).grid()
    
    
    root.mainloop()
    
    选项_read.config的内容为

    [widget]
    label : animesh_label,sharma
    entry : animesh_entry,sharma
    
    地位: 我可以自动创建所需的小部件。但我无法动态创建变量来存储输入框值。 计算完变量后,我可以自己编写计算函数

    请告诉我如何进行。 如果你有更好的方法来满足我的要求,请提出建议。
    如果您需要更多输入或我的查询不清楚,也请执行ping me操作。

    IMO,最简单的方法是使用dict存储对动态创建的变量的引用。您可以使用标签作为键。例如:

    vars = {}
    for x in config_list['entry']:
        vars[x] = StringVar()
        entry = ttk.Entry(mainframe_entry, textvariable=vars[x])
        entry.grid()
    

    顺便说一下。。。您是否知道,如果您执行类似于
    x=ttk.Entry(…).grid(…)
    的操作,
    x
    不包含对小部件的引用?它包含调用
    网格
    的结果,该结果为无

    您说您“无法动态创建变量”。为什么?你有错误吗?您真的需要使用变量,还是只想使用变量?您是否知道不需要使用变量来获取和设置条目小部件的内容。我实际上是在尝试生成单个变量。由于我最近对python了解不多,这似乎是正确的方法。但是我的主要目标是开发一个脚本,在这个脚本中,声明、布局和最终输出都是完全自动化的,并且依赖于从configparser文件读取的内容。谢谢您的回复。我试过之后再给你打电话。另外,我是否可以自动化小部件布局,以便通过configparser文件,用户还可以决定放置哪个小部件以及放置在何处。