2014-02-09 2 views
0

Я написал программу, которая будет вводить пользовательский ввод (имя, фамилия и класс средней школы), и когда пользователь закончит ввод, они могут нажать кнопку, которую я создал, называемую «Enter». Однако, чтобы сделать мою программу немного опрятной, я хочу, чтобы пользователь мог использовать клавишу ввода на клавиатуре.Как назначить функцию кнопке «Ввод»?

Как назначить функцию, связанную в настоящее время с кнопкой «Ввод», которую я определил клавише ввода на клавиатуре, чтобы пользователь мог использовать либо?

name_var = StringVar() 
    def event_enter_1(): 
     self.Enter_1.config(state=(NORMAL if name_var.get() else DISABLED)) 

    name_var.trace('w', lambda name, index, mode: event_enter_1()) 
    enter_name = Entry(self, textvariable=name_var) 
    enter_name.pack() 
    enter_name.focus_set() 



    def enter_button_1(): 
     if len(name_var.get()) > 10 or any(l not in string.ascii_letters for l in name_var.get()): 
      tkMessageBox.showerror("Error", "Please enter a real name.") 
     else: 
      global student_name 
      student_name = name_var.get() 
      self.Enter_1.config(state="disabled") 

      self.display_surname= tk.Label(self, width=40, height=2, text = "Now please enter your surname.") 
      self.display_surname.pack(side="top", fill="both", expand=True) 

      surname_var = StringVar() 
      def event_enter_2(): 
       self.Enter_2.config(state=(NORMAL if surname_var.get() else DISABLED)) 
      surname_var.trace('w', lambda name, index, mode: event_enter_2()) 
      surname = Entry(self, textvariable=surname_var) 
      surname.pack() 
      surname.focus_set() 

      def enter_button_2(): 
       if len(surname_var.get()) > 10 or any(l not in string.ascii_letters for l in surname_var.get()): 
        tkMessageBox.showerror("Error", "Please enter a real name.") 
       else: 
        global student_surname 
        student_surname = surname_var.get() 
        self.Enter_2.config(state="disabled") 

        self.display_tutor = tk.Label(self, width=40, height=2, text = "Now please enter your tutor group.") 
        self.display_tutor.pack(side="top", fill="both", expand=True) 

        tutor_var = StringVar() 
        def event_enter_3(): 
         self.Enter_3.config(state=(NORMAL if tutor_var.get() else DISABLED)) 
        tutor_var.trace('w', lambda name, index, mode: event_enter_3()) 
        tutor = Entry(self, textvariable=tutor_var) 
        tutor.pack() 
        tutor.focus_set() 

        def enter_button_3(): 
         if tutor_var.get() not in ["5A1", "5A2", "5B1", "5B2", "5B3", "5C1", "5C2", "6A1", "6A2", "6B1", "6B2", "6C1", "6C2", "6C3"]: 
          tkMessageBox.showerror("Error", "Please enter a tutor group that exists.") 
         else: 
          global student_tutor_group 
          student_tutor_group = tutor_var.get() 
          self.Enter_3.config(state="disabled") 
          tkMessageBox.showinfo("Details Confirmation", "Thank you for entering your details. Now you can begin the quiz. Good luck!") 
          parent.question_1.config(state="normal") 
          parent.enter_name.config(state="disabled") 
          self.destroy 


       self.Enter_3 = Button(self, text="Enter", width=10, command=enter_button_3) 
       self.Enter_3.pack() 
       self.Enter_3.config(state="disabled") #Initially the enter button is disbabled as the user hasn't started typing 


     self.Enter_2 = Button(self, text="Enter", width=10, command=enter_button_2) 
     self.Enter_2.pack() 
     self.Enter_2.config(state="disabled") #Initially the enter button is disbabled as the user hasn't started typing 


    self.Enter_1 = Button(self, text="Enter", width=10, command=enter_button_1) 
    self.Enter_1.pack() 
    self.Enter_1.config(state="disabled") #Initially the enter button is disbabled as the user hasn't started typing 

Я извиняюсь, если это запутывает, я новичок в программировании ОО, и, возможно, есть более эффективные способы. Помощь будет высоко оценена. Спасибо

ответ

2

Чтобы связать событие с функцией, необходимо добавить ссылку . В этом случае событие <Return>. Вы бы сделать это следующим образом:

enter_name.bind('<Return>', enter_button_1) 

Когда вяжущие пожары, он будет вызывать функцию с одним аргументом, который является объектом, описывающий событие. Вам необходимо будет изменить свою функцию, чтобы принять это событие:

def enter_button_1(event=None) 
+0

Спасибо, как бы мне изменить свою функцию? – user3056786