2009-10-04 6 views
1

필자는 텍스트의 패턴 일치를 수행하는 작은 유틸리티를 파이썬에서 작성하고 있습니다. 사용자가 입력 한 패턴과 일치하는 텍스트는 노란색으로 강조 표시됩니다.강조 표시 할 때 텍스트의 기존 배경색을 제거하는 방법은 무엇입니까?

Tkinter Text 위젯을 사용하여이 작업을 수행하고 "match"이라는 텍스트 위젯에 태그를 설정하면 태그 이름이 "match" 인 텍스트에 노란색 배경이 표시됩니다.

마우스를 사용하여 텍스트를 강조 표시하려고 할 때를 제외하고 모두 멋지게 보입니다 (예 : 복사/붙여 넣기를 원할 때). 마우스로 텍스트를 강조 표시하면 이미 노란색 배경이있는 태그가있는 텍스트는 강조 표시된 후에도 노란색 배경을 유지합니다. 즉, 마우스로 강조 표시된 텍스트를 제대로 읽을 수 없다는 것을 의미합니다. 노란색 배경의 흰색 텍스트 (마우스로 강조 표시된 텍스트가 흰색으로 바뀜)가 대비가 좋지 않습니다.

내가 원했던 것은 마우스를 사용하여 텍스트 위젯에서 텍스트를 강조 표시하면 모든 텍스트가 일반적으로 Windows 시스템에서 사용하는 표준 파란색 배경 색상/흰색 텍스트 색상을 얻습니다 텍스트 섹션을 강조 표시 할 때 여기

무슨 뜻인지 설명하는 빠른 코드입니다 :
from tkinter import * 

root = Tk() 

w = Text(root) 
w.tag_config("match",background="yellow") 
w.config(highlightbackground="red") 
w.pack() 
w.insert(INSERT,"some non-matching text.") 
w.insert(INSERT,"some matching text.","match") 

root.mainloop() 

이를 실행 한 다음 텍스트 위젯의 모든 텍스트를 선택하면

, 당신은 볼이 노란색 배경과 텍스트 읽을 수 없게됩니다. 코드 조각에 내가 사용 하이라이트 배경 색상을 변경하려고했습니다 위

참고 :

w.config(highlightbackground="red") 

하지만이 일을하지 않았다.

답변

3

태그가 우선합니다. 우선 순위가 높은 태그는 우선 순위가 낮은 태그보다 우선합니다. 텍스트 범위를 선택하면 "sel"태그가 부여됩니다. 알렉스 마르 텔리는 의견의 글을

w.tag_raise("sel") 

는 "이 absoluely [원문] 좋은 영업을하지 않습니다 : 당신은 단순히 당신의"일치 "태그의 우선 순위 이상이어야하기 위해"SEL "태그의 우선 순위를 인상 할 필요가 그가 selectbackground 대신에 highlightbackground를 설정하면 "틀렸어. 하이라이트 배경 설정은 선택과 아무 상관이 없지만이 솔루션에는 아무런 영향이 없습니다.

"sel"태그의 우선 순위를 높이면 highlightbackground를 설정하는 코드를 추가했는지 여부에 관계없이 원래 질문의 코드와 함께 작동합니다.

텍스트 위젯에 대한 자세한 내용은 text widget tutorial on tkdocs.com을 확인하십시오. Tcl, Python, Ruby 및 Perl의 코드 예제가 있습니다.

+1

당신이 쓰는 것은 기술적으로 정확하지만 selectbackground 대신 highlightbackground를 설정하면 OP가 전혀 도움이되지 않습니다. 기본적으로이 답변은 _plus_ 내 첫 단락 인 ;-)이 필요합니다. –

+0

틀렸어. 내 솔루션은 highlightbackground 또는 selectbackground를 구성하거나하지 않고 자신의 문제를 해결합니다. 나는 네가 간단히 투표했기 때문에 나를 엎드려 투표했다고 생각한다. 차이점은 내 솔루션이 비 솔루션이 아닌 것입니다. –

+0

브라이언과 동의해야합니다 - w.tag_raise ("sel")를 사용하면 원래 질문에서 제공 한 예제에 필요한 모든 것입니다. –

0

나는 완전히 다른 무언가 (가 포커스를 얻었을 때 위젯 주위에 표시된 "하이라이트 직사각형"의 BG 색상)을 의미 selectbackground하지 highlightbackground을 설정할 필요가 있다고 생각합니다. 그러나, 의사 태그 (내가 "당신이"하이라이트 "라고 부르는 것 인 선택을 나타냄)가 match과 같은 사용자 생성 태그의"아래 "라고 믿습니다. 그렇다면 sel 의사 태그 (별칭 selectbackground)의 bg 색상이 아니라 사용자가 만든 태그의 bg 색상이 표시됩니다.

Tk 8.5를 사용하면 의사 태그 sel의 "상단"에 적절하게 색상이 지정된 사용자 태그를 배치하는 기능을 <Selection> 가상 이벤트에 바인딩함으로써이를 해결할 수 있습니다. 그러나 Tk 8.4에는 그러한 이벤트가 없습니다. 이것은 현재 당신이 사용하고있는 것입니다. TK's docs 8.5는 Windows 용 Python의 ActiveState 배포판에서 Python 3.1과 함께 제공됩니다. 불행히도 다른 플랫폼이나 Python의 다른 버전에 관한 "TODO"자리 표시 자만 있습니다 - 특정 플랫폼 및 Python 버전에 대해 Tk 8.5를 가장 잘 얻을 수있는 방법을 모르겠습니다.

+1

당신이 쓰는 것은 기술적으로 정확하지만 실제로 문제를 해결하지는 않으며 문제가 특정 버전의 Tk로만 해결 될 수 있음을 의미합니다. –