2015-10-06 112 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变量,因为它在第一个类中被实例化。我打算就此提交第二个问题,但如果您有任何建议,请不吝赐教! –