私はPythonベースのtkinterコードを次のような目標で試しています: (目的を辿ってから、私が必要としていることを説明していきます。configparserファイルに基づいた動的ウィジェット作成
- configparserモジュールを使って実装された設定ファイルから読み込みます。
- このファイルから読み取ったオプションに基づいて、自動的にウィジェットが生成されます。
- これらのウィジェットは今のところラベルと入力ボックスのみに制限されています。
- すべての入力ボックスは、変数に関連付けられています。したがって、入力ボックスが宣言されると自動的に変数 を生成する必要があります。
- ユーザが入力ボックスに任意の値を入力し、計算ボタンを押すと、ユーザによって入力された値の組合せ(特定のフォーマットで)でリストが生成されます( )。
例: のConfigParserファイルをしてみましょう次ました内容:
[ウィジェット]
ラベル= ani_label、sham_label
エントリ= ANIは、偽
この場合に生成されるリストは、次のようになります。
out_list = [ '-ani '< ANI>'、 ' - 偽'、 '<偽>']
< 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()
option_read.configの内容は
[widget]
label : animesh_label,sharma
entry : animesh_entry,sharma
STATUSです: 私は自動的に必要なウィジェットを作成することができます。しかし、私は、入力ボックスの値を格納する変数を動的に作成することができません。 変数が計算されたら、自分で計算関数を書くことができます。
どうすればいいですか? 私の要件を満たす良い方法があればお勧めします。 さらに入力が必要な場合やクエリが明確でない場合は、pingを実行してください。
あなたは「変数を動的に作成できません」と言います。どうして?エラーが出ていますか?変数を使用する必要がありますか、それともしたいだけですか?エントリウィジェットの内容を取得および設定するために変数を使用する必要がないことをご存じですか? –
私は実際に個々の変数を生成しようとしていました。私は最近得た謙虚な知識をPythonで手に入れましたが、これは正しい方法でした。 私の主な目標は、-declaration、レイアウト、そして最終的には最終出力が完全に自動化され、configparserファイルから読み込まれる内容に依存するスクリプトを開発することです。 – Ani