2010-07-01 3 views
4

필자는 pygtk 응용 프로그램을 openoffice calc에서 소수점과 관련이있는 방식으로 동작 시키려고합니다. 이것은 KP_Decimal 키 (키패드의 점)를받을 때 현재 항목에 소수점이 무엇이든간에 (점 또는 쉼표가 적절하게 표시되는지) 내 항목을 표시하기를 원합니다.pygtk에서 다른 키로 누른 키를 변환하는 방법

나는 오랫동안 지금을 검색해 왔으며이를 수행하는 방법을 찾을 수 없었습니다. Gtk.Entry에서 key_press_event를 캡처하고 KP_Decimal을 확인할 수 있으며 소수점의 현재 로캘 설정을 가져올 수 있습니다. 하지만 필요한 경우 점을 쉼표로 변환하는 방법을 모르겠습니다.

이 변경 사항을 앱에 전역으로 적용하고 특정 항목에만 국한되지 않도록 입력 방법과 같이 좀 더 일반적인 방식으로 수행 할 수 있다면 좋을 것입니다. 나는 그들에 관해서도 읽었으며, 나는 그들이 원하는 것을 사용하는 방법을 찾을 수 없었다. 이 작업을 수행 할 수

답변

2

한 가지 방법과 같이, gtk.Entry의 서브 클래스입니다 : 하나 또는 두 개의 에지 경우가있을 수 있으므로

import gtk 
import locale 

class NumericEntry(gtk.Entry): 
    __gsignals__ = { 
     'key_press_event': 'override' 
    } 
    def do_key_press_event(self, event): 
     if event.keyval == gtk.gdk.keyval_from_name('KP_Decimal'): 
      event.keyval = int(gtk.gdk.unicode_to_keyval(ord(locale.localeconv()['decimal_point']))) 
     gtk.Entry.do_key_press_event(self, event) 

나는 완전히,이 테스트를하지 않은,하지만 그것을 위해 잘 작동하는 것 같다 나를.

하위 클래스를 사용하는 것이 좋은 점은 기존 위젯을 바꿀 수 있다는 것입니다.이 동작으로 텍스트 항목이 필요할 때마다 gtk.Entry이 아닌 NumericEntry을 사용하면됩니다.

희망이 도움이됩니다.

+0

답변 해 주셔서 감사합니다. 모든 텍스트 항목을 바꾸는 것을 의미하기 때문에 원하는 내용이 아니지만 그것을 가지고 있지 않은 것보다 훨씬 낫습니다. –

관련 문제