python - 화면 - 파이썬 이벤트




이벤트에서 위젯 이름을 얻는 방법 (2)

빠르고 더러운 -이 기능을 사용하여 스위처 속성을 검사 할 수 있습니다.

def flipper(event, switch):
    if switch.widget == 's1':
        do_stuff
        return stuff
    if switch.widget == 's2':
        do_stuff
        return stuff

switcher1.widget = 's1'
switcher2.widget = 's2'
from tkinter import *

main = Tk()

def flipper(event):

    # I'd like to do this:
    #if widgetname == switcher:
        #do stuff
    #if widgetname == switcher1:
        #do stuff
    return

switcher = Label(main, bg='white', text="click here", font="-weight bold")
switcher.grid()
switcher.bind("<Button-1>", flipper)


switcher1 = Label(main, bg='white', text="click here", font="-weight bold")
switcher1.grid()
switcher1.bind("<Button-1>", flipper)

switcher2 = Label(main, bg='white', text="click here", font="-weight bold")
switcher2.grid()
switcher2.bind("<Button-1>", flipper)

switcher3 = Label(main, bg='white', text="click here", font="-weight bold")
switcher3.grid()
switcher3.bind("<Button-1>", flipper)

switcher4 = Label(main, bg='white', text="click here", font="-weight bold")
switcher4.grid()
switcher4.bind("<Button-1>", flipper)

switcher5 = Label(main, bg='white', text="click here", font="-weight bold")
switcher5.grid()
switcher5.bind("<Button-1>", flipper)


main.mainloop()

내 이벤트 함수에서 나는 클릭 한 레이블을 기반으로 다른 일을하고 싶습니다. 어떤 난처한 점은 이름이 아닌 위젯의 식별자 번호 만 얻을 수 있다는 것입니다. 모든 위젯의 식별자를 얻을 수 있다면 다음과 같이 할 수 있습니다.

def flipper(event):
    if event.widget == switcher.identifier():
           do stuff

하지만 난 위젯 중 특정 ID를 얻는 방법을 찾지 못한다.

식별자 (event.widget ())를 사용하여 위젯의 이름을 얻는 방법은 무엇입니까?

또는 지정된 위젯 이름의 식별자를 얻으려면 어떻게해야합니까?

어느 쪽도 가능하지 않다면 나는 다른 기능을 만들어야하고 각 라벨에 바인딩해야한다.

편집하다:

from tkinter import *

main = Tk()

def flipper(event, switch):
    if switch.widget == 's1':
        print("got it")

switcher = Label(main, bg='white', text="click here", font="-weight bold")
switcher.grid()
switcher.bind("<Button-1>", flipper)
switcher.widget = 's1'


main.mainloop()

위젯이 할당 된 변수 이름을 가져올 수 없습니다. 상대적으로 쓸모가 없습니다. 위젯은 둘 이상의 변수에 할당 될 수도 있고 전혀 할당되지 않을 수도 있습니다.

레이블 텍스트 가져 오기

실제 위젯에 액세스 할 수 있으며이를 사용하여 레이블에있는 텍스트를 가져올 수 있습니다. 귀하의 예제는 모든 레이블이 동일 함을 보여 주므로 유용하지 않을 수 있습니다.

def flipper(event):
    print("label text:", event.widget.cget("text"))

사용자 정의 위젯 이름 사용

위젯에 이름을 지정할 수도 있습니다. 이름을 정확하게 되돌릴 수는 없지만 아주 가까이 올 수 있습니다. 예를 들어, 다음과 같은 레이블을 만드는 경우 :

switcher = Label(main, name="switcher", bg='white', text="click here", font="-weight bold")

"."로 분리하여 위젯의 문자열 표현을 얻을 수 있습니다. 마지막 값 가져 오기 :

def flipper(event):
    print("widget name:", str(event.widget).split(".")[-1])

바인딩을 통해 이름 전달하기

마지막으로 함수에 이름이 전송되도록 바인딩을 설정할 수 있습니다.

switcher.bind("<Button-1>", lambda event: flipper(event, "switcher"))
switcher1.bind("<Button-1>", lambda event: flipper(event, "switcher1"))






widget