ihmin 2025. 2. 19. 11:25

홈페이지 : https://www.nemethi.de/

많은 Tcl/Tk 프로그래머는 다음과 같은 문제에 직면합니다.

  • Tk 또는 Ttk entry, BWidget Entry, Tk 또는 Ttk spinbox, Ttk combobox, text 또는 ctext 위젯에 입력하거나 붙여 넣을 수 있는 문자를 제한하는 방법은 무엇인가요?
  • 이러한 위젯 중 하나에 삽입되기 전에 사용자 입력 문자를 조작하는 방법은 무엇인가요?
  • text 또는 ctext 위젯의 경우, 입력 문자의 글꼴, 색상 또는 기타 속성을 변경하려면 어떻게 해야 하나요?
  • Tk 또는 Ttk entry, BWidget Entry, Tk 또는 Ttk spinbox 또는 Ttk combobox 위젯에 입력하거나 붙여 넣을 수 있는 문자 수에 제한을 설정하려면 어떻게 해야 하나요?
  • Tk 또는 Ttk entry, BWidget Entry , Tk 또는 Ttk spinbox, Ttk combobox, text 또는 ctext 위젯에 포함된 텍스트의 일부가 사용자에 의해 변경되지 않도록 보호하려면 어떻게 해야 합니까?
  • 이러한 위젯 중 하나에서 텍스트가 삽입되거나 삭제 된 후 자동으로 트리거 되도록 알림을 정의하려면 어떻게 해야 하나요?
  • Tk 또는 Ttk entry, BWidget Entry, Tk 또는 Ttk spinbox, Ttk combobox, text 또는 ctext 위젯의 삽입 커서를 이동할 때마다 자동으로 호출되는 일부 작업을 정의하려면 어떻게 해야 하나요?
  • listbox 요소, tablelist 행 또는 셀, Ttk treeview 항목 또는 text 또는 ctext 위젯의 문자 범위를 선택할 때 자동으로 호출되는 명령을 정의하는 방법은 무엇입니까?
  • listbox, tablelist 항목 또는 Ttk treeview의 일부 또는 모든 항목 / 요소 또는 text 또는 ctext 위젯의 문자 범위가 선택되지 않도록 보호하려면 어떻게 해야 합니까?

대부분의 책, FAQ, 뉴스그룹 문서, 위젯 세트에서 위젯 바인딩을 통해 위의 문제 중 일부에 대한 개별적인 해결책을 찾을 수 있지만, 이 접근 방식은 새로운 바인딩 태그를 추가하거나 기존 태그를 일부 수정하는 것을 기반으로 하므로 불완전한 경우가 많습니다. 

 

위젯 콜백 패키지 Wcb는 위의 문제에 대해 완전히 다른 일반적인 해결책을 제공합니다. 위젯에 해당하는 Tcl 명령을 재정의하는 것을 기반으로, 기본 Wcb 프로시저인 wcb::callback을 사용하면 임의의 명령을 일부 Tk entry, Ttk entry, BWidget Entry, Tk spinbox, Ttk spinbox, Ttk combobox, listbox, tablelist, Ttk treeview, text 및 ctext 위젯 작업과 연결할 수 있습니다. 이러한 명령은 각 위젯 작업이 실행될 때마다 전역 범위에서 자동으로 호출됩니다. 각 위젯 작업을 실행하기 전이나 후에 이러한 명령을 호출하도록 요청할 수 있습니다. 즉, 전후 콜백을 모두 정의할 수 있습니다. 비포 콜백 내에서 wcb::cancel 프로시저를 호출하여 해당 위젯 명령을 취소하거나 wcb::extend 또는 wcb::replace를 호출하여 해당 인수를 수정할 수 있습니다.

Example

wcb::callback .e1 before insert wcb::checkStrForAlnum wcb::convStrToUpper                                
wcb::callback .e2 before insert {wcb::checkEntryLen 10} wcb::checkEntryForInt
wcb::callback .e3 before insert {wcb::checkEntryLen 10} checkNumber

#
# Callback procedure checkNumber
#
proc checkNumber {w idx str} {
    set newText [wcb::postInsertEntryText $w $idx $str]
    if {![regexp {^[0-9]*\.?[0-9]?[0-9]?$} $newText]} {
        wcb::cancel
    }
}

Download

wcb4.1.1.tar.gz
0.51MB
wcb4_1_1.zip
0.22MB