2016-09-14 5 views
0

クラス(Eventsim)内でモジュール(updateUI)を呼び出すときに問題があります。Tkinterクラスモジュール参照例外

Sim = EventSim()行は、引数(親)がないため例外をスローします。私はこれを修正する方法/親オブジェクトを参照する方法を理解することはできません。

これはTkinterの私の最初の試みであり、私のpythonの知識もかなり限られています(今のところ)。

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

parentは、rootである必要があります。だから、交換:

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

はい、 'updateUI'への' 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()