2011-12-08 5 views
3

큰 파이썬/tkinter로 작성된 을 더 큰 GUI의 일부로 사용하고 있습니다.콤보 박스 편집시 요격 이벤트

드롭 다운 선택을 변경하면 색상이 변경되어 사용자에게 변경된 사항이 있음을 나타냅니다.

그러나 콤보 상자를 사용하면 사용자가 자신의 값을 입력 할 수도 있습니다. 나는 이런 일이 생길 때 색깔을 바꾸고 싶다.

문제는, 이것을 수행하는 방법을 나타내는 the ComboBox documentation에 아무것도 표시되지 않습니다.

+1

정확한 효과를 얻으려면 추적 및 유효성 검사가 필요합니다. 더 까다로운 것은 색상 변경을 좋아하는 콤보 박스를 설득하는 것입니다. 슬프게도 스타일 해킹은 아프다. –

+0

@DonalFellows - true; 콤보 박스와 체크 버튼과 같은 빌트인 위젯을 자신의 프레임에 넣는 "랩핑 된"수퍼 위젯을 사용하기 전까지는 어떤 스타일 변경도 할 수 없었습니다. 그런 다음 프레임의 색 또는 다른 것을 변경할 수 있습니다. –

답변

3

어디 선가 파이썬의 Tkinter 문서에서, 그것은 ComboBoxEntry의 하위 클래스임을 언급 것으로 나타났습니다.

Entry은 다음과 같습니다. 구성을 설정하십시오 :

  • -validatecommand은 키를 눌렀을 때 (내 경우 색상 변경) 발생하도록 설정해야합니다.
  • -validatekey으로 설정해야합니다. 즉 커서가 항목에있는 동안 키를 누를 때마다 유효성 검사 명령이 호출됩니다.

Here's 추가 참조를 위해 텍스트 항목에 tk 페이지가 있습니다.

콤보 박스와 똑같은 일을하는 것은 똑같은 방식으로 작동합니다 (내가 말할 수있는 한).

9

StringVar를 Combobox 생성자의 매개 변수로 사용할 수 있습니다. 이 StringVar 추적 할 수 있습니다 (, 각 변경 구독). 여기에 작은 예를

는 :

from Tkinter import * 
from ttk import * 

def on_field_change(index, value, op): 
    print "combobox updated to ", c.get() 

root = Tk() 
v = StringVar() 
v.trace('w',on_field_change) 
c = Combobox(root, textvar=v, values=["foo", "bar", "baz"]) 
c.pack() 

mainloop()