我正在尝试一段基于python的tkinter代码,其目标如下: (请完成目标,然后我会举一个例子来解释我究竟需要什么,然后最后会发布我写的剧本)
实施例: 让configparser文件包含以下内容:
[插件]
label = ani_label,sham_label
entry = ani,sham
为此案例生成的列表将如下所示:
out_list = [' -ani','< ani>' -sham','<假的>']
以下是我尝试的代码。
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()
option_read.config的内容是
[widget]
label : animesh_label,sharma
entry : animesh_entry,sharma
STATUS: 我可以自动创建所需的小部件。但我无法动态创建变量来存储输入框值。 一旦计算了变量,我就可以自己编写计算函数了。
请告知我如何继续。 如果您有更好的方法来满足我的要求,请建议。 如果您需要更多输入或我的查询不清楚,也请ping我。
答案 0 :(得分:1)
最简单的方法是使用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
不包含对小部件的引用?它包含对grid
的调用结果,即无。