2016-09-19 5 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'에만 새 값을 저장하고이 값을 사용하여 항목 위젯을 다시로드하지 않습니다. 첫 번째 생성시 'self.Proyecto'로 항목을로드하고 버튼을 한번 누르면 항목을로드하여이 작업을 수행 할 수 있습니다. 'self.Proyecto'는'self.Proyecto = 'test''로 초기화되어야합니다. – Joules

+0

감사 Joules. "getdata"함수에서이 작업을 수행해야합니까? – Eduardo

+0

getdata 함수에서 이미'self.Proyecto'를 업데이트하고 있습니다. 이 값을 저장하는 방법을 찾아 내야 윈도우가'__init__'을 다시 통과 할 때 다시'test'로 바뀌지 않을 것입니다. – Joules

답변

0

하나의 옵션은 클래스가 소유 한 목록, 즉를 만드는 것입니다 :

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

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

기본 개념은 각 클래스 DEFAULTVALUE에 대해 동일한 값이 있다는 것입니다 : 메모리 곳의 지점에 대한 링크를 '100'이 저장됩니다. 해당 위치에서 값을 변경하면 클래스의 이후 인스턴스에 대해 값을 업데이트합니다.

+0

고마워요! 그것은 작동합니다. – Eduardo