>백엔드 개발 >파이썬 튜토리얼 >Tkinter의 텍스트 위젯에서 텍스트 업데이트 후 사용자 정의 코드를 어떻게 실행할 수 있습니까?

Tkinter의 텍스트 위젯에서 텍스트 업데이트 후 사용자 정의 코드를 어떻게 실행할 수 있습니까?

DDD
DDD원래의
2024-11-03 20:03:29836검색

How can you execute custom code after text updates in Tkinter's Text widget?

Tkinter 텍스트 위젯에서 바인딩은 어떻게 작동하나요?

Tkinter에서 텍스트 위젯과 상호작용할 때 키 입력이 연결된 바인딩을 트리거합니다. 위젯으로. 이러한 바인딩은 입력할 때 텍스트가 업데이트되는 방식을 결정합니다. 그러나 내장된 클래스 바인딩을 통해 텍스트 업데이트가 발생한 후 자신의 코드를 실행하려는 경우가 있습니다.

비하인드 스토리: 바인딩 태그 및 이벤트 처리

Tkinter는 이벤트를 처리하기 위해 바인딩 태그를 사용합니다. 각 위젯에는 위젯과 동일한 이름을 가진 바인드 태그가 있으며 다른 바인드 태그에는 위젯의 클래스, 루트 창의 경로 및 일반 "all" 태그가 포함됩니다. 위젯에는 가장 구체적인 것(위젯)부터 시작하여 가장 덜 구체적인 것(모두)으로 끝나는 순서대로 이벤트를 처리하는 바인드 태그가 할당됩니다.

바인딩 순서 문제 해결

클래스 바인딩 후 자체 정의 이벤트를 바인딩하려면 바인딩 태그 순서를 변경하거나 새 바인딩 태그를 도입하는 두 가지 옵션이 있습니다.

옵션 1: 바인딩 태그 재정렬

바인드 태그의 순서를 조정하여 클래스 바인딩보다 사용자 정의 바인딩에 대한 이벤트 처리의 우선순위를 지정할 수 있습니다. 예를 들어 위젯을 나타내는 바인드 태그(아래 코드의 "entry1")가 있는 경우 바인드 태그 목록에서 클래스 바인드 태그("Entry") 아래로 이동하세요.

<code class="python">entry1.bindtags(('Entry', '.entry1', '.', 'all'))</code>

옵션 2: 새 바인드 태그 소개

또는 클래스 바인드 태그 뒤에 추가 바인드 태그를 만들 수도 있습니다. 그러면 바인딩이 이 새 태그에 연결됩니다.

<code class="python">entry3.bindtags(('.entry3','Entry','post-class-bindings', '.', 'all'))

# Custom bindings are attached to the 'post-class-bindings' tag
entry3.bind_class("post-class-bindings", "<KeyPress>", OnKeyPress)</code>

코드 예

다음 코드는 이러한 기술의 사용을 보여줍니다.

<code class="python">import Tkinter

def OnKeyPress(event):
    value = event.widget.get()
    string="value of %s is '%s'" % (event.widget._name, value)
    status.configure(text=string)

root = Tkinter.Tk()

entry1 = Tkinter.Entry(root, name="entry1")
entry2 = Tkinter.Entry(root, name="entry2")
entry3 = Tkinter.Entry(root, name="entry3")

entry1.bindtags(('.entry1', 'Entry', '.', 'all'))
entry2.bindtags(('Entry', '.entry2', '.', 'all'))
entry3.bindtags(('.entry3','Entry','post-class-bindings', '.', 'all'))

# Custom bindings are attached to the default tags
entry1.bind("<KeyPress>", OnKeyPress)

# Custom bindings are attached to the reordered tags
entry2.bind("<KeyPress>", OnKeyPress)

# Custom bindings are attached to the new 'post-class-bindings' tag
entry3.bind_class("post-class-bindings", "<KeyPress>", OnKeyPress)

root.mainloop()</code>

이 코드를 실행하고 세 개의 항목 위젯에서 키를 누르면 첫 번째 항목 위젯의 바인딩이 기본 바인딩 순서로 인해 한 문자 뒤쳐지는 것처럼 보이는 것을 알 수 있습니다. 그러나 두 번째 및 세 번째 항목 위젯에 대한 바인딩은 사용자가 입력하는 대로 텍스트를 올바르게 업데이트합니다.

위 내용은 Tkinter의 텍스트 위젯에서 텍스트 업데이트 후 사용자 정의 코드를 어떻게 실행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.