2016-05-31 2 views
0

기본 팔레트 색상과 사용자 정의 색상 모두에서 Tcl/Tk를 사용하는 데 문제가 있습니다.팔레트의 배경을 설정 해제 하시겠습니까?

특정 상황에서 배경색을 설정하고 (예 : 사용자 입력이 누락되었음을 나타냄) 기본 배경색으로 되돌아 가고 싶습니다 (특정 상황이 해결되면) .

지금까지 나는 위젯에 -background 옵션을 사용 해왔다. 예.

$ wish 
# ALERT: turn the background to pink 
. configure -background pink 
# SNAFU: turn the background back to white 
. configure -background white 

하지만, 난 그냥 내 응용 프로그램의 글로벌 팔레트를 설정할 수있는 tk_setPalette을 발견했다. 불행히도 두 가지가 잘 어울리지 않는 것 같습니다. 일단 내가 명시 적으로 위젯의 배경색을 설정했으면 의 설정을 해제했습니다. (현재 팔레트에서 설정된 기본 색상으로 되돌아갑니다.) :

$ wish 
# cheesy color-scheme 
tk_setPalette brown 
# ALERT: turn the background to pink 
. configure -background pink 
# SNAFU: turn the background back to "normal" 
. configure -background white 
# hmpf, no not "white"; the current palette is 'brown' 
. configure -background brown 

하나 개의 솔루션 (I 피하고자하는) 변수에 팔레트를 저장하고, 그 명시 적 배경 설정하는 데 사용하는 것입니다 그러나

$ wish 
# cheesy color-scheme 
set mypalette brown 
tk_setPalette $mypalette 
# ALERT: turn the background to pink 
. configure -background pink 
# SNAFU: turn the background back to "normal" 
. configure -background $mypalette 

을이 가지고 다양한 단점 : - 팔레트 변경 사항을 추적해야합니다. 내 응용 프로그램에 appens합니다 (내 응용 프로그램에 skinning에 사용할 수있는 "플러그인"시스템이 있으므로 잠재적으로 수행하기가 어렵습니다) - 이것은 background에서만 작동하지만 색상 팔레트를 설정하면 배경색보다 더 많은 색상이 변경됩니다 .

Esp. 두 번째 단점은 실질적인 문제입니다. 현재 내 위젯 중 하나는 기본 배경으로 white, pink을 경고 색상으로, default 텍스트 색상으로 사용하는 텍스트 entry입니다. white 이외의 색 구성표로 변경할 때마다 기본 텍스트 색이 white이되어 배경이 보이지 않게됩니다 (배경이 default이 아니기 때문에 white이기 때문에).

그래서 질문은 다음과 같습니다

  • 은 어떻게 palette에서 제공하는 기본값으로 색상을 복원 할 수 있습니다?

  • palette에서 주어진 요소의 기본 색을 어떻게 쿼리 할 수 ​​있습니까?

답변

0

tk_setPalette가 더 이상 지원되지 않는다고 생각합니다. 사전 ttk 위젯과 결합하여 으로 사용되며 모든 테마에서 작동하지 않습니다.

쿼리 기본 색상 :

는 TTK 위젯의 배경 색상을 활용하려면 다음 TFrame 위젯의 "클래스"입니다

set bg [ttk::style lookup TFrame -background] 

.

set bg [. cget -background] 

이 방법은 거의 모든 사전 TTK 위젯 작동합니다

은 사전 TTK 위젯의 배경색을 얻으려면.

색상 변경을 추적하는 경우 theming 플러그인을로드 할 때 잠재적으로 필요할 수있는 모든 팔레트 기본 색상 인 배경, 필드 배경색, 전경색 및 기타 색상을 저장합니다.

다른 위젯의 현재 전경/배경 등을 저장하면 오류 표시를 위해 수정하기 전에 을 저장하기 만하면됩니다.

set oldbg [.myentry cget -background] 
set oldfg [.myentry cget -foreground] 
... change colors, display error condition... 
... when error is resolved ... 
.myentry configure -background $oldbg 
.myentry configure -foreground $oldfg 

참고 : ttk::styleframetk_setPalette

관련 문제