基于configparser-fi的动态小部件创建

2024-10-02 00:41:35 发布

您现在位置:Python中文网/ 问答频道 /正文

一段基于python的kinter代码正在尝试: (请先浏览一下目标,然后我会举个例子来解释我到底需要什么,然后在最后把我写的剧本贴出来)

  1. 从配置文件中读取,该文件是使用configparser模块实现的。在
  2. 基于从这个文件读取的选项,它自动生成小部件。在
  3. 到目前为止,这些小部件仅限于标签和输入框。在
  4. 每个输入框都与一个变量相关联。因此需要生成一个变量 每当声明输入框时自动。在
  5. 现在,当用户在列表框中输入任何值时,都可以按“计算”按钮 由用户输入的值组合生成(以特定格式)。在

示例: 让configparser文件包含以下内容:

[widget]

label = ani_label,sham_label

entry = ani,sham

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

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

<;ani>;表示存储在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()

期权的内容_读取.config是

^{pr2}$

状态: 我可以自动创建所需的小部件。但是我不能动态地创建变量来存储输入框的值。 一旦变量被计算出来,我就可以自己编写calculate函数了。在

请告诉我该怎么办。 如果你有更好的方法来满足我的要求,请务必提出建议。 如果你需要更多的输入或者我的查询不清楚,也可以ping我。在


Tags: importconfigreadcolumnrootlabellistgrid
1条回答
网友
1楼 · 发布于 2024-10-02 00:41:35

最简单的方法是使用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的结果,该结果为None。在

相关问题 更多 >

    热门问题