2014-03-01 4 views
1

코드의이 섹션에서 버튼의 명령을 goRun으로 설정하고 Return 키를 goRun에 바인딩하려고합니다. 내 버튼이 작동하지만 내 키 바인딩이 작동하지 않는 이유는 무엇입니까?

def goRun(): 
    Run.runData(ENTRY=symbolEntry.get(), GREATER=greaterEntry.get(), BETWEEN=betweenEntry.get(), LESSER=lesserEntry.get()) 
    #^ "Run" is a seperate class. 

button = Button(app, text="Go Data", command=goRun, fg="blue") 
button.pack(side="top", pady=2, padx=10) 

app.bind('<Return>', goRun) 

내가 응용 프로그램을 실행하고 Return 키를 누릅니다

, 나는이 오류 얻을 :

TypeError: goRun() takes no arguments (1 given) 

을하지만이 버튼을 누르면,이 명령을 실행하고 잘 작동합니다.

내가 뭘 잘못하고 있니?

+2

어떤 GUI 라이브러리를 사용하고 있습니까? –

+1

이것은 거의 확실하게'tkinter'입니다. –

답변

2

사용중인 GUI 라이브러리가 tkinter이라고 가정하면 키 누르기로 콜백을 활성화하면 event이라는 매개 변수가 전달되기 때문입니다. 이 같은입니다 귀하의 함수 정의를 수정하십시오 : 당신의 함수가 무엇을 할 수있는 단서가없는있는 매개 변수를 수신 한

def goRun(event=None): 

그래서 오류를 얻고있다. event=None으로 우리는 "그 주장이 나오면 걱정하지 말라. 아무것도 아니다"라고 말하고있다.

Return 키를 사용하면이 오류가 발생하지만이 인수는이 인수를 제공하기 때문에 인수를 보내지 않으므로 Button과 함께 작동합니다.

+1

실제로,'event = None'은 "그 인자가 올 때 걱정하지 마십시오."라는 의미는 아닙니다. 오히려, 그것은 "나는 여기서 논증을 기대하지만, 만약 내가 그것을 얻지 못한다면 그것을 None으로 설정한다"는 의미입니다. 함수를 이벤트의 콜백 및 코드의 다른 곳에서 사용할 수있는 편리한 방법입니다. 예를 들어'command' 속성의 객체로 with를 사용하는 것과 같이 전달할 이벤트 객체가 없습니다. 이벤트를 보내지 마십시오. –

관련 문제