2016-12-05 1 views
-2

나는 잠시 동안이 예를 찾고있다. 내 작품을위한 지루한 것들을 자동화하기 위해 함께 몇 개의 스크립트를 묶는 간단한 애플리케이션을 만들려고 노력 중이다. 내가 직면 한 문제는 일단 첫 번째 스크립트가 실행되면 앱에 창을 스왑하도록 요청하여 두 번째 매개 변수가 스크립트의 해당 부분에 대한 매개 변수를 입력 할 수 있도록 표시되지만 첫 번째 스크립트를 완료해도 아무런 오류가 발생하지 않습니다. 그러나 나는 또한 교환을 얻지 않는다.Tkinter Windows 기능 교환하기

모든 예제에서 버튼 누름시 창을 변경해야하지만이 작업은 필요하지 않습니다. 이 버튼은 스크립트 메소드를 호출하고 완료되면 show_frames 메소드를 호출합니다.

나는 show_frames를 부르는 방식에 문제가 있다는 것을 확신합니다. 누군가가 도와 주면 정확한 방향으로 안내 할 수있을 것입니다.

나는 다른 사람들이 OOP 기반이 아닌 나의 첫번째 OOP 기반 TKinter 응용 프로그램입니다.

관련 코드 : 어떤 도움

class bossinit(tk.Tk): 
def __init__(self,*args,**kwargs): 
    tk.Tk.__init__(self,*args,**kwargs) 

    tk.Tk.iconbitmap(self,default="hieta_icon.ico") 
    container = tk.Frame(self) 
    container.pack(side="top",fill="both",expand=True) 
    container.grid_rowconfigure(0,weight=1) 
    container.grid_columnconfigure(0,weight=1) 
    self.frames = {} 

    for F in (RenamePage,ProcessPage): 
     frame = F(container,self) 
     self.frames[F] = frame 
     frame.grid(row=0,column=0,sticky="nsew") 
    #frame = RenamePage(container,self) 
    #self.frames[RenamePage] = frame 
    #frame.grid(row=0,column=0,sticky="nsew") 
    self.show_frame(RenamePage) 
def show_frame(self,cont): 
    frame = self.frames[cont] 
    frame.tkraise() 

class RenamePage(tk.Frame): 
def __init__(self, parent, controller): 
    tk.Frame.__init__(self,parent) 
    ttk.Frame.__init__(self,parent) 

    self.v1 = tk.StringVar() 
    v2 = tk.StringVar() 

    title1 = ttk.Label(self,text="Re-naming Parameters:") 
    title1.grid(row=0,column=0,padx=10,pady=10) 
    self.dirLabel = ttk.Label(self,text="Working Directory:") 
    self.dirLabel.grid(row=1,column=0,padx=10,pady=10) 
    self.wdDirRe = ttk.Entry(self,width=40) 
    self.wdDirRe.config(state='readonly') 
    self.wdDirRe.grid(row=1,column=1,columnspan=2,padx=10,pady=10) 
    findDirBut = ttk.Button(self,text="...",command=self.findWdDirectory) 
    findDirBut.grid(row=1,column=3,padx=10,pady=10) 
    startNumLbl = ttk.Label(self,text="Start Number:") 
    startNumLbl.grid(row=1,column=4,padx=10,pady=10) 
    self.startNumEnt = ttk.Entry(self,width=5) 
    self.startNumEnt.grid(row=1,column=5,padx=10,pady=10) 

    label = ttk.Label(self,text="Output Directory:") 
    label.grid(row=2,column=0,padx=10,pady=10) 
    self.outDir = ttk.Entry(self,width=40,textvariable=v2) 
    self.outDir.config(state='readonly') 
    self.outDir.grid(row=2,column=1,padx=10,pady=10,columnspan=2) 
    button = ttk.Button(self,text="...",command=self.findOutDirectory) 
    button.grid(row=2,column=3,padx=10,pady=10) 
    label = ttk.Label(self,text="End Number:") 
    label.grid(row=2,column=4,padx=10,pady=10) 
    self.endNumEnt = ttk.Entry(self,width=5) 
    self.endNumEnt.grid(row=2,column=5,padx=10,pady=10) 
    label = ttk.Label(self,text="Write Start:") 
    label.grid(row=3,column=4,padx=10,pady=10) 
    self.writeNumEnt = ttk.Entry(self,width=5) 
    self.writeNumEnt.grid(row=3,column=5,padx=10,pady=10) 
    label = ttk.Label(self,text="Preffix:") 
    label.grid(row=3,column=0,pady=10) 
    self.preffix = ttk.Entry(self,width=5) 
    self.preffix.grid(row=3,column=1,pady=10) 
    label = ttk.Label(self,text="Suffix:") 
    label.grid(row=3,column=2,pady=10) 
    self.suffix = ttk.Entry(self,width=5) 
    self.suffix.grid(row=3,column=3,pady=10) 

    var = False 
    progressBar = ttk.Progressbar(self,orient="horizontal",length=300,mode="determinate") 
    progressBar.grid(row=4,column=0,padx=10,pady=10,columnspan=2) 
    check = ttk.Checkbutton(self,text="Run defaults",variable=var) 
    check.v = var 
    check.grid(row=4,column=2,padx=30,pady=10) 
    button = ttk.Button(self,text="Run",width=20,command=self.run) 
    button.grid(row=4,column=4,padx=10,pady=10,columnspan=2) 
def run(self): 
    print("- - - RUN - - -") 
    #print(controller.validate(self)) 
    print(self.validate) 
    if(self.validate() == True): 
     ##Script Code 
    else: 
     print("Validated - Not Acceptable") 

    lambda: controller.show_frame(ProcessPage) 

건배! "

+0

모든 메소드에서 사용할 수 있습니다 주위의 ProcessPage : .show_frame (ProcessPage)하지만 이것은 아무런 차이가 없습니다. –

+0

'print()'를 사용하여 프로그램에서 무슨 일이 벌어지고 있는지 살펴 봅니다. 어떤 부분이 실행되는지, 어떤 값은 바래어스 같은 것입니까? 이런 식으로 문제를 찾을 수 있습니다. – furas

+0

왜'lambda'를 사용합니까 ??? 함수를 생성하지만 실행하지는 않습니다. 언급 한 바와 같이 – furas

답변

2

당신은 RenamePage

def __init__(self, parent, controller): 

controllor를 보내하지만 당신은 클래스 속성

self.controller = controller 

을 만들 필요가 다음 난 그냥"추가

self.controller.show_frame(ProcessPage)