2016-09-14 2 views
0

클래스 (Eventsim) 내에서 모듈 (updateUI)을 호출하는 데 문제가 있습니다.Tkinter 클래스 모듈 참조 예외

Sim = EventSim() 행에는 인수 (상위)가 없기 때문에 예외가 발생합니다. 이/부모 개체를 참조하는 방법을 해결할 방법을 알아낼 수 없습니다.

이것은 Tkinter에 대한 나의 첫 번째 시도이며 파이썬 지식 또한 제한적입니다 (현재는 제한적 임).

from Tkinter import * 


class EventSim(Frame): 

    def __init__(self, parent): 
     Frame.__init__(self, parent) 

     self.parent = parent 

    def updateUI(self,IP_Address,Port_Number,Events_Directory): 

     self.parent.title('ECP Event Simulator') 
     self.parent.resizable(0, 0) 
     self.pack(fill=BOTH, expand=True) 

     frame1 = Frame(self) 
     frame1.pack(fill=X) 
     frame2 = Frame(self) 
     frame2.pack(fill=X) 
     frame3 = Frame(self) 
     frame3.pack(fill=X) 
     frame4 = Frame(self) 
     frame4.pack(fill=X) 
     frame5 = Frame(self) 
     frame5.pack(fill=X) 
     frame6 = Frame(self) 
     frame6.pack(fill=X,pady=(10,30)) 
     frame7 = Frame(self) 
     frame7.pack(fill=X) 
     frame8 = Frame(self) 
     frame8.pack(fill=X,pady=(10,0)) 


     Main_Label = Label(frame1,text='ECP EventSim') 
     Main_Label.pack(side=LEFT,padx=100) 

     IP_Label = Label(frame2,text='IP Address:') 
     IP_Label.pack(side=LEFT,padx=10) 
     Port_Label = Label(frame2,text='Port:') 
     Port_Label.pack(side=RIGHT,padx=70) 

     IP_Text = Entry(frame3) 
     IP_Text.pack(fill=X,side=LEFT,padx=10) 
     IP_Text = Entry(frame3) 
     IP_Text.pack(fill=X,side=RIGHT,padx=10) 

     Dir_Label = Label(frame4,text='Events Directory:') 
     Dir_Label.pack(side=LEFT,padx=10) 
     Dir_Text = Entry(frame5) 
     Dir_Text.pack(fill=X,side=LEFT,padx=10,expand=True) 

     Save_Button = Button(frame6,text='Save Config') 
     Save_Button.pack(fill=X,side=LEFT,padx=10,expand=True) 
     Con_Button = Button(frame7,text='Connect') 
     Con_Button.pack(fill=X,side=LEFT,padx=10,expand=True) 
     Send_Button = Button(frame8,text='Start Sending Events') 
     Send_Button.pack(fill=X,side=LEFT,padx=10,expand=True) 

def main(): 
    root = Tk() 
    root.geometry("300x300+750+300") 
    app = EventSim(root) 
    root.mainloop() 


Sim = EventSim() 
Sim.updateUI('1','1','1') 
main() 
+0

모양 : 당신은 당신이 부모를 통과 한 곳과 그렇지 한 곳이있다. 부모를 통과하지 않는 것을 제거하면 불필요한 것처럼 보입니다. –

+0

나는 당신이 updateUI 메소드에 대해 이야기하고 있다고 가정합니다. 그렇다면 내 실수입니다. 내가 실험하고 부모를 전달 원래 코드의 일부가 아니었다. 나는 그것을 꺼내지 만, 모듈이 호출되기 전에 예외가 던져지기 때문에 문제가 해결되지 않는다. –

+0

네 말이 맞아. 내가 게시 한 코드에 따르면 그들은 사용되지 않고 있지만 미래에있을 것입니다. 여기에 게시하기 전에 매개 변수를 꺼내는 것을 잊었습니다. –

답변

2

parentroot이어야합니다. 그래서, 교체 :

def main(): 
    root = Tk() 
    root.geometry("300x300+750+300") 
    app = EventSim(root) 
    root.mainloop() 


Sim = EventSim() 
Sim.updateUI('1','1','1') 
main() 

로 :

root = Tk() 
root.geometry("300x300+750+300") 
Sim = EventSim(root) 
Sim.updateUI('1','1','1') 
root.mainloop() 

원하는 창을 제공합니다. updateUI 메서드를 사용하려면 입력 필드를 채우는 작업이 필요하지만 이미 parent 인스턴스 변수가 있으므로 parent 매개 변수를 제거 할 수 있습니다.

+0

그게 효과가있다. 고맙습니다. 이제 나는 그것을 본다. updateUI가 진행되는 한 "일부 작업"에 대해 자세히 설명 할 수 있습니까? 그냥 일반적인 힌트 요? 나는 정확한 대답을 찾고있는 것이 아니라 올바른 방향으로 나아가는 포인터 일지도 모른다는 것을 배우려고합니다. 도와 주셔서 다시 한 번 감사드립니다! –

+0

예,'update_ui '에 대한'IP_Address','Port_Number','Events_Directory' 매개 변수가 사용되지 않습니다. 입력 필드는 메소드 이름을 기반으로하는 값으로 채워 져야한다고 가정합니다. –

1

Sim = EventSim()를 제거하고 Sim.updateUI('1','1','1')main로 이동 : 자신의 코드에

def main(): 
    root = Tk() 
    root.geometry("300x300+750+300") 
    app = EventSim(root) 
    app.updateUI('1','1','1') 
    root.mainloop() 

main()