2012-03-28 4 views
3

나는 간단한 텍스트 편집기를 만들려고 노력 중이며 태그를 실험 해 왔습니다. 나는 태그를 사용하여 정당화를 만들 수 있었다. 이제 대담한 옵션을 추가하고 있습니다.태그를 사용하여 선택한 텍스트를 굵게 설정합니다.

내 문제는 현재 선택에 사용되는 "sel" 태그를 사용하는 많은 예제를 찾을 수 없다는 것입니다.

내가 SEL 태그를 사용할 때마다 텍스트가 강조 표시 될 때만 굵게 표시되며, 강조 표시되지 않으면 이전 마른 글꼴로 되돌아갑니다.

이 내 코드의 일부입니다 다음 Bold 버튼을 누르면, 이전 함수가 호출

def Bold(self, body, Just, Line, selected font): 
    bold font = tkFont.Font(family=selectedfont, weight="bold") 
    selected font = boldfont 
    body.tag_config("sel",font=selectedfont) 
    body.tag_add("sel", 1.0,END) 

. 지금은 body.tag_add("sel", 1.0, END)1.0에서 END까지 설정했습니다. 왜냐하면 선택한 도메인을 얻는 방법을 모르거든요. 나는 <<Selection>>을 시도했지만 오랜 시간 동안 실험 한 후에도 도움이되지 못했습니다.

답변

4

당신은 함수의 내부 tag_add()을 필요 : 전혀 관련이없는 검색에

import Tkinter as tk 

def make_bold(): 
    aText.tag_add("bt", "sel.first", "sel.last") 

lord = tk.Tk() 

aText = tk.Text(lord, font=("Georgia", "12")) 
aText.grid() 

aButton = tk.Button(lord, text="bold", command=make_bold) 
aButton.grid() 

aText.tag_config("bt", font=("Georgia", "12", "bold")) 

lord.mainloop() 

난 그냥 브라이언 오클리 다름 아닌 오히려 교육 example에 걸쳐 일어난
을! 여기

는보다 역동적 대안의 빠른 예입니다

import Tkinter as tk 
import tkFont 

def make_bold(): 
    current_tags = aText.tag_names("sel.first") 
    if "bt" in current_tags: 
     aText.tag_remove("bt", "sel.first", "sel.last") 
    else: 
     aText.tag_add("bt", "sel.first", "sel.last") 


lord = tk.Tk() 

aText = tk.Text(lord, font=("Georgia", "12")) 
aText.grid() 

aButton = tk.Button(lord, text="bold", command=make_bold) 
aButton.grid() 

bold_font = tkFont.Font(aText, aText.cget("font")) 
bold_font.configure(weight="bold") 
aText.tag_configure("bt", font=bold_font) 

lord.mainloop() 
+0

고맙습니다. 이해합니다. 따라서 SEl은 항상 강조 표시된 텍스트에만 적용됩니다. 강조 표시하면 사라집니다. 그러나 특정 태그를 사용하여 도메인을 가져올 수 있으며 굵은 글꼴이 포함 된 다른 태그를 적용 할 수 있습니다. 감사합니다.이 점은 앞으로 내가 할 텍스트와 같은 다른 많은 일들에 도움이되었습니다. – reallycoolnerd

+1

@reallycoolnerd 방금 내 대답을 업데이트했습니다. 유용 할 수도 있습니다. –

+0

그것을 이해하는 데 조금 시간이 걸렸지 만, 나는 이것을 골라서 해석 할 수있었습니다. 감사합니다. Bold toggle에 대한 도움이되었습니다. – reallycoolnerd

1

태그의 속성이 아니라 텍스트, 태그에 속한다. 따라서 뭔가를 강조 표시 한 다음 "sel" 태그에 속성을 적용하면 "sel" 태그가있는 텍스트에만 영향을줍니다. 태그를 제거하면 (강조 표시 해제 됨) 속성이 기본값 (또는 존재할 수있는 다른 태그)으로 되돌아갑니다.

텍스트를 굵게 만들려면 bold 속성이있는 태그를 만들어 해당 태그를 텍스트에 지정해야합니다. 텍스트에 해당 태그가 있으면 해당 태그의 속성을 갖습니다.

+0

그래서 시작 위치를 알아야합니다. 강조 표시 및 강조 표시의 끝 위치를 표시하고 내 굵은 태그의 도메인으로 사용합니까? – reallycoolnerd

+0

위와 같은 답변으로 놀았지만 태그 중 하나에서 내 도메인을 변경하는 것을 잊어 버렸습니다. 감사합니다. 태그를 훨씬 잘 이해할 수있게 도와주었습니다. – reallycoolnerd

+0

@reallycoolnerd : syb "domain"은 무엇을 의미합니까? Tkinter는 텍스트 위젯이나 다른 위젯에 "도메인"이라는 이름을 붙이지 않았습니다. –

관련 문제