2015-10-06 4 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__() определяется, когда вы пытаетесь создать экземпляр , он ожидает параметр, и вы ничего не предоставляете.

Я не знаю, как выглядит остальная часть вашего кода, если вы используете master2 в своем __init__() для класса newFrame(). Но, возможно, вы захотите это сделать.

В качестве небольшого количества дополнительной информации, пожалуйста, не называйте классы как newFrame(). Вместо этого перейдите в этот формат: NewFrame().

Вот стиль руководства, чтобы помочь вам вам: https://www.python.org/dev/peps/pep-0008/

+0

Спасибо за ответ! Я пошел дальше и добавил «root» в качестве параметра в класс NewFrame(). Я также включил еще один код, представляющий его класс NewFrame(). Этот вопрос был фактически результатом проблемы с доступом к состоянию Checkbutton's в этом классе. Понял, что сначала разобрал бы это. –

+0

Помогло ли вам немного двигаться вперед? – idjaw

+0

На самом деле я просто хотел убедиться, что я на правильном пути. Моя реальная проблема здесь заключается в доступе к переменной Checkbutton вне класса, в результате ее создания в первом классе. Я собирался представить второй вопрос для этого, но если у вас есть какой-либо совет, я очень ценю это! –