2015-10-06 175 views
0

我正在嘗試爲我的應用程序構建一個登錄屏幕,並且我只是想知道這是否是適合的方式。我已經設置了它,以便Button命令檢查證書並實例化一個新類(這只是一個新框架),如果它們是正確的。從類內實例化類

class Login(): 

    def __init__(self, master): 

     self.frame = Frame(master) 
     self.frame.pack() 

     self.logo = Label(self.frame) 
     self.logo.grid(row=0, columnspan=2) 

     self.user_name = Label(self.frame, text="Username:") 
     self.pw = Label(self.frame, text="Password:") 
     self.entry_1 = Entry(self.frame) 
     self.entry_2 = Entry(self.frame, show="*") 

     self.user_name.grid(row=1, column=0) 
     self.pw.grid(row=3, column=0) 

     self.entry_1.grid(row=2, column=0) 
     self.entry_2.grid(row=4, column=0) 

     self.login_button = Button(self.frame, text="Login", command=self.attempt) 
     self.login_button.grid(row=5,columnspan=2) 

    def attempt(self, *args): 
     if self.entry_1.get() == "USER" and self.entry_2.get() == "PASS": 
      self.frame.forget() 
      load = newFrame(root) 
     else: 
      print("Try Again") 
      self.try_again = Label(self.frame, text="Incorrect Username or Password", bg="#474747", fg="lightgray") 
      self.try_again.grid(row=9,columnspan=2) 

class newFrame(): 

    def __init__(self, master2): 


     self.a_var = IntVar() 
     self.b_var = IntVar() 

     frame_main = Frame(master2) 
     frame_main.grid(row=2, column=2) 

     a_check = ttk.Checkbutton(frame_main,text="A",variable=self.a_var) 
     a_check.grid() 

     b_check = ttk.Checkbutton(frame_main,text="B",variable=self.b_var) 
     b_check.grid() 

     frame_bottom = Frame(master2) 
     frame_bottom.grid(row=3, column=2) 

     self.scan_button = Button(frame_bottom, text="Scan", command=MasterScan) 
     self.scan_button.grid() 

root = Tk() 
new = Login(root) 

我的問題是,我很難從這個新實例化的類訪問變量。

任何提示?

謝謝!

回答

0

我在你的代碼,現在看到的問題是,你正在此調用:

load = newFrame() 

但是,你的類定義爲:

class newFrame(): 

    def __init__(self, master2): 

這表明,因爲如何您的__init__()被定義,當您嘗試實例化時,它期待一個參數,並且您沒有提供任何參數。

我不知道你的代碼的其餘部分是否看起來像是在你的__init__()newFrame()類中使用master2。但你可能想看看這個。

作爲一些額外的信息,請不要將類命名爲newFrame()。相反,使用這種格式:NewFrame()

以下是可以幫助您的樣式指南:https://www.python.org/dev/peps/pep-0008/

+0

感謝您的迴應!我繼續添加'root'作爲NewFrame()類的參數。我還包含了一些更多的代碼將它呈現給NewFrame()類。這個問題實際上是無法訪問該類Checkbutton狀態的結果。我想先解決這個問題。 –

+0

這有助於你向前邁進一點嗎? – idjaw

+0

我其實只是想確定我是在正確的軌道上。我真正的問題是在類的外部訪問Checkbutton變量,因爲它在第一個類中被實例化。我打算就此提交第二個問題,但如果您有任何建議,請不吝賜教! –