2016-09-19 10 views
0

私は単純なエントリーウィジェットと2つのボタンを含むトップレベルウィンドウを持っています。 (クラスopc)デフォルト値を更新するエントリーウィジェット

エントリウィジェットにはデフォルト値 "test"が割り当てられています。私がしようとしているのは、ユーザーが新しい値を入力したときにこのデフォルト値を更新し、これをウィンドウの新しいインスタンスにデフォルトとして表示することです。

値を変更して変更を保存すると、ウィンドウの新しいインスタンスは常に「テスト」を表示し、新しい入力は表示しません。

これを行うにはどのような方法が最適ですか?私は "Stringvar"を使うべきですか?

import tkinter as tk 
from tkinter import ttk 


class TEP(tk.Frame): 
    def __init__(self, parent): 
     tk.Frame.__init__(self, parent) 
     self.parent = parent 

     label=tk.LabelFrame(self, text="REFERENCIAS", height=180, labelanchor="n",borderwidth="2",relief="groove") 
     label.pack(fill="x",padx=10,pady=10) 


class opc(tk.Frame):  
    def __init__(self, parent,*args, **kwargs): 
     tk.Frame.__init__(self, parent,*args, **kwargs) 
     self.parent = parent 
     self.grid() 


     datlab = tk.LabelFrame(self.parent, text="Información", labelanchor="nw",borderwidth="2",relief="groove") 
     datlab.grid(column=0,row=0,padx=5,pady=3,ipadx=5,ipady=5) 

     labelproy=tk.Label(datlab,text="Proyecto:",padx=5,pady=5) 
     labelproy.grid(column=0, row=0, sticky=tk.W) 
     self.entrproy=tk.Entry(datlab,width=27) 
     self.entrproy.insert(0,"Test") 
     self.entrproy.grid(row=0,column=1,sticky=tk.W,padx=5) 

     self.ok = ttk.Button(self.parent, text="OK", command=self.getdata) 
     self.ok.grid(column=0,row=4,sticky=tk.W,padx=50,pady=7) 
     self.cancel = ttk.Button(self.parent, text="Cancelar", command=self.parent.destroy) 
     self.cancel.grid(column=0,row=4,sticky=tk.E,padx=50,pady=7) 

     self.parent.bind('<Return>',self.getdata) 

    def getdata(self,*args): 

     self.Proyecto=self.entrproy.get() 
     print(self.Proyecto) 
     self.parent.destroy() 



def main(): 
    root = tk.Tk() 
    app = TEP(root) 
    app.pack(side="top", fill="both", expand = True) 
    menubar=MenuBar(root) 
    menubar.add 
    root.config(menu=menubar) 
    root.title("App") 
    root.focus_force() 
# root.wm_state('zoomed') 
    root.minsize(width=1000, height=420) 
    root.columnconfigure(0,weight=1) 
    root.rowconfigure(0,weight=1) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 
+0

新しい値を 'self.Proyecto'にのみ保存し、この値を使ってエントリウィジェットを再読み込みしません。 Entryを最初に作成したときに 'self.Proyecto'で読み込み、もう一度ボタンを押すと、これを実現できます。 'self.Proyecto'は' self.Proyecto = 'test''として初期化されなければなりません。 – Joules

+0

ありがとうジュール。私は "getdata"関数でこれを行う必要がありますか? – Eduardo

+0

getdata関数ですでに 'self.Proyecto'を更新しています。その値を格納する方法を見つける必要があります。そのため、ウィンドウが '__init__'をもう一度実行しているときに再び' test'に置き換えられません。 – Joules

答えて

0

1つのオプションはすなわち、クラスが所有するリストを作成することです:

class classname(object): 
    defaultvalue=[100] #Default is 100 

    def dostuff(self): 
     self.defaultvalue[0]=self.entryname.get() 

基本的な考え方は、各クラスがDEFAULTVALUEで同じ値があることである:メモリーのスポットへのリンク'100'が格納されます。その場所の値を変更すると、クラスの将来のインスタンスの値が更新されます。

+0

ありがとう!できます。 – Eduardo

関連する問題