2014-02-09 4 views
0

사용자 입력 (이름, 성 및 고등학생)을 입력하는 프로그램을 작성했으며 사용자가 타이핑을 마쳤 으면 '입력'이라는 버튼을 만들 수 있습니다. 그러나, 내 프로그램을 좀 더 깔끔하게하기 위해 사용자가 키보드에서 Enter 키를 사용할 수 있기를 원합니다.'입력'버튼에 기능을 지정하려면 어떻게합니까?

사용자가 사용할 수 있도록 키보드의 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

관련 문제