2016-01-15 2 views
0

Мне нужно выделить конкретное слово в тексте в рамке tkinter. Чтобы найти это слово, я помещаю баллис, как в html. Так в тексте, как «привет, я в | доме»? Я хочу выделить слово «дом».Как выделить конкретное слово в tkinter?

Моя рамка определяется так:

class FrameCodage(Frame): self.t2Codage = Text(self, height=20, width=50)

и вставить свой текст с этим кодом: fenetre.fCodage.t2Codage.insert(END, res), рес является переменной, содержащей мой текст.

Я видел этот код на другой пост в:

class CustomText(tk.Text): 
'''A text widget with a new method, highlight_pattern() 

example: 

text = CustomText() 
text.tag_configure("red", foreground="#ff0000") 
text.highlight_pattern("this should be red", "red") 

The highlight_pattern method is a simplified python 
version of the tcl code at http://wiki.tcl.tk/3246 
''' 
def __init__(self, *args, **kwargs): 
    tk.Text.__init__(self, *args, **kwargs) 

def highlight_pattern(self, pattern, tag, start="1.0", end="end", 
         regexp=False): 
    '''Apply the given tag to all text that matches the given pattern 

    If 'regexp' is set to True, pattern will be treated as a regular 
    expression. 
    ''' 

    start = self.index(start) 
    end = self.index(end) 
    self.mark_set("matchStart", start) 
    self.mark_set("matchEnd", start) 
    self.mark_set("searchLimit", end) 

    count = tk.IntVar() 
    while True: 
     index = self.search(pattern, "matchEnd","searchLimit", 
          count=count, regexp=regexp) 
     if index == "": break 
     self.mark_set("matchStart", index) 
     self.mark_set("matchEnd", "%s+%sc" % (index, count.get())) 
     self.tag_add(tag, "matchStart", "matchEnd") 

Но они кое-что я не понимаю: как я могу применить эту функцию в моем случае? Когда я назвал эту функцию? Каков шаблон и тег в моем случае? Я новичок в Tkinter, поэтому не стесняйтесь объяснять мне этот код или другое.

ответ

2

Вместо этого:

class FrameCodage(Frame): 
    self.t2Codage = Text(self, height=20, width=50) 

... это сделать:

class FrameCodage(Frame): 
    self.t2Codage = CustomText(self, height=20, width=50) 

Далее создайте "изюминка" тег, и настроить его, как вы хотите:

self.t2Codage.tag_configure("highlight", foreground="red") 

Наконец, вы можете вызвать метод highlight_pattern, как если бы это был стандартный метод:

self.t2Codage.highlight_pattern(r"\|.*?\|", "red", regexp=True) 
+0

Спасибо, что помогли мне. «CustomText» присылает мне сообщение об ошибке «не определено». Кроме того, я не вводил свой текст в свой кадр в том же классе, что и FrameCodage. Затем, как я называю свою функцию? Я попробовал «FrameCodage.t2Codage.highlight_pattern (...)», но он не работает. Для того, чтобы быть уверенным, я должен определить тег сразу после «self.t2Codage = Text (self, height = 20, width = 50)»? – pioupiou1211

+1

@ pioupiou1211: вам нужно добавить тег после создания виджета; перед его созданием невозможно позвонить. Неважно, где и когда вы вставляете текст. После того, как вы вставляете текст, вы можете вызвать метод 'highlight_text'. Это не произойдет автоматически. –

+0

Хорошо, тогда я назвал метод, прежде чем вставлять текст, поскольку это не имеет значения. Но у меня есть эта ошибка: 'self.t2Codage.highlight_pattern (r" \ |. *? \ | "," Red ", regexp = True) AttributeError: объект 'Text' не имеет атрибута 'highlight_pattern'' – pioupiou1211

Смежные вопросы