2017-11-07 13 views
0

私はTkinterを使って簡単なユーザーインターフェイスを開発しています。いくつかのチェックボタンとエントリがあり、それらをすべてファイルに保存するためのボタンを設定する必要があります。 これはコードです:TkinterでUI要素の値を取得する

from tkinter import * 
import json, sys 

class Window(Frame): 
    def load_config(self,obs,wav): 
     d = json.load(open('config.txt','r')) 
     self.conf_dict = d[obs][wav] 

    def __init__(self,master,observatory,wavelength): 
     Frame.__init__(self, master) 
     self.master = master 
     self.load_config(observatory,wavelength) 
     r = 0 
     for k,v in self.conf_dict.items(): 
      r += 1 
      self.l = Label(master, text=k+':') 
      self.l.grid(row=r,column=0,padx=10, pady=5) 
      if isinstance(v,bool): 
       self.c = Checkbutton(master) 
       self.c.grid(row=r,column=1,padx=10,pady=5) 
      else: 
       self.e = Entry(master) 
       self.e.insert(END,str(v)) 
       self.e.grid(row=r,column=1,padx=10, pady=5) 
     self.b = Button(master,text='Save',command=save_callback) 

    def save_callback(self): 
     # save new config file with json 

if __name__ == '__main__': 
    root = Tk() 
    app = Window(root,sys.argv[1],sys.argv[2]) 
    root.mainloop() 

最高のアイデアは、直接conf_dictの値を変更し、save_callbackで辞書を保存することです。これどうやってするの?私はボタンのIDを取得するか、またはそれらをdictにリンクするための何らかの方法が必要です。

注:私はself.c = Checkbutton(master,var=self.conf_dict[k])で試しましたが、動作しません。

+0

は、チェックボックスの値を取得する必要がありますか?それはチェックされているかどうかを確認するか?あなたが何を求めているのか混乱しています。 – Goralight

+0

もちろん、私はチェックボックスの値が必要です。何が分かりませんか? – RobiNoob

答えて

0

は解決:

class Window(Frame): 

    def load_config(self,obs,wav): 
     d = json.load(open('config.txt','r')) 
     self.conf_dict = d[obs][wav] 

    def save_callback(self,d): 
     for k,v in l.items(): 
      print(k,v.get()) 
     # save new config file with json 

    def __init__(self,master,observatory,wavelength): 
     Frame.__init__(self,master) 
     self.master = master 
     self.load_config(observatory,wavelength) 
     self.elements = {} 
     for k,v in self.conf_dict.items(): 
      l = Label(master, text=k+':') 
      l.grid(row=len(self.elements),column=0,padx=10, pady=5) 
      if isinstance(v,bool): 
       self.elements[k] = IntVar() 
       self.elements[k].set(int(v)) 
       c = Checkbutton(master, var=self.elements[k]) 
       c.grid(row=len(self.elements)-1,column=1,padx=10,pady=5) 
      else: 
       self.elements[k] = Entry(master) 
       self.elements[k].insert(END,str(v)) 
       self.elements[k].grid(row=len(self.elements)-1,column=1,padx=10,pady=5) 
     self.b = Button(master,text='Save', 
       command=(lambda new_dict=self.elements:self.save_callback(new_dict))) 
     self.b.grid(row=len(self.elements),column=1,padx=10,pady=5) 
関連する問題