2017-12-17 16 views
0

버튼을 클릭 할 때만 함수를 바인딩하려고합니다. 나는 그것이 람다를 사용하는 것이 가능하다는 것을 알고 있지만, 문제는 함수를 통해 변수를 전달해야하므로 람다를 사용할 수 없다는 것입니다.버튼에 파이썬 바인딩 기능이 있습니다.

아래 코드는 버튼의 결합 방법을 사용하려고 시도하지만, 이것은 직관이며 작동하지 않습니다 :

from tkinter import * 

root = Tk() 

variable = StringVar() 

entry = Entry(root, textvariable=variable, width=10) 

entry.pack() 

def print_something(event, n): 

    print(n) # I know it is supposed to be indented ;) 

btn = Button(root, text='print something') 

btn.bind('<Button-1>', print_something(variable)) 

btn.pack() 

root.mainloop() 
+2

질문을 게시 할 때 질문을 쉽게 읽을 수 있도록 코드의 서식을 지정하십시오. 질문을 편집 할 때 코드를 강조 표시하고 ctrl + k를 눌러 텍스트를 코드로 포맷하십시오. – Stu

+0

들여 쓰기 때문에 작동하지 않을 수도 있습니다! 어떤 코드가 실제로 작동하지 않는지 알려주고 – doctorlove

+1

이 질문은 모두 stackoverflow를 통해 해결할 수 있습니다. 먼저 질문을 작성해보십시오. 질문이 없거나 다를 경우 질문을 작성하십시오. –

답변

0

나는 당신의 질문을 이해한다면, 당신의 사용을 만들 수있는 방법을 찾고 lambda 표현입니다. variable

Set 값 코딩에 의하여 : variable.set(2)

가 그 함수에서 이벤트 매개 변수를 제거 아래 단계입니다. 다음과 같이 btn 코드를 수정

: 결합으로

: 버튼의 방법에 대한 콜백으로 코드의 함수를 사용하여 인쇄 주어진 값

Get

btn.bind('<Button-1>', lambda a: print_something(variable.get())) 

코드 :

from tkinter import * 

root = Tk() 
variable = StringVar() 
variable.set(2) 
entry = Entry(root, textvariable=variable, width=10) 
entry.pack() 
def print_something(n): 
    print(n) 
btn = Button(root, text='print something') 
btn.bind('<Button-1>', lambda a: print_something(variable.get())) 
btn.pack() 
root.mainloop() 
바인딩없이

다음과 같이

btn 코드를 수정 :

여기
btn = Button(root, text='print something', command=lambda: print_something(variable.get())) 

내가 행동에 의미하는 것입니다 : 코드를 청소해야합니다

from tkinter import * 

root = Tk() 
variable = StringVar() 
variable.set(2) 
entry = Entry(root, textvariable=variable, width=10) 
entry.pack() 
def print_something(n): 
    print(n) 
btn = Button(root, text='print something', command=lambda: print_something(variable.get())) 
btn.pack() 
root.mainloop() 

참고.

+0

안녕하세요. 귀하의 답변을 주셔서 감사합니다,하지만 불행히도 그것은 내 질문이 매우 나쁘게 표현되기 때문에 그것은 도움이되지 않았다. 사과! 나는 나의 프로그램에 훨씬 더 구체적인 또 다른 질문을 올렸다. 당신이 대답 할 수 있다면 대단히 감사합니다! –