Возможно, вам нужно прочитать RichTextCtrl
https://wxpython.org/Phoenix/docs/html/richtextctrl_overview.html
Просто используя TextCtrl
, вы можете
1 установить атрибуты стиля постфактум (спасибо, Робин за ваш комментарий) или
2 применить атрибуты стиля к тексту по ходу дела. .
Установка атрибутов стиля постфактум с использованием re
для предварительного поиска всех вхождений вашего слова:
import wx
import re
string='''"Have more than thou showest,
Speak less than thou knowest,
Lend less than thou owest,
Ride more than thou goest,
Learn more than thou trowest,
Set less than thou throwest."
-The Fool in King Lear'''
class Quote(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, None, -1)
self.InitUI()
def InitUI(self):
panel=wx.Panel(self)
word = 'thou'
word_colour = wx.TextAttr(wx.BLUE)
word_occurs = self.find_str(word,string)
self.text=wx.TextCtrl(panel, pos=(20,20), size=(250,220),
style=wx.TE_MULTILINE|wx.TE_READONLY)
self.text.AppendText(string)
for i in word_occurs:
#SetStyle(start pos, end pos, style)
self.text.SetStyle(i,i+len(word),word_colour)
self.SetSize((300,300))
self.Centre()
self.Show(True)
def find_str(self,sub,sent): #return positions of the word
return [x.start() for x in re.finditer(sub,sent)]
def main():
app=wx.App()
Quote()
app.MainLoop()
if __name__ == '__main__':
main()
Длинный способ сделать это, применяя атрибуты стиля по мере продвижения:
import wx
string1='''"Have more than'''
string2='''showest,
Speak less than'''
string3='''knowest,
Lend less than'''
string4='''owest,
Ride more than'''
string5='''goest,
Learn more than'''
string6='''trowest,
Set less than'''
string7='''throwest."
-The Fool in King Lear'''
class Quote(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, None, -1)
self.InitUI()
def InitUI(self):
panel=wx.Panel(self)
self.text=wx.TextCtrl(panel, pos=(20,20), size=(250,220),
style=wx.TE_MULTILINE|wx.TE_READONLY)
self.text.AppendText(string1)
self.text.SetDefaultStyle(wx.TextAttr(wx.BLUE))
self.text.AppendText(" thou ")
self.text.SetDefaultStyle(wx.TextAttr(wx.NullColour))
self.text.AppendText(string2)
self.text.SetDefaultStyle(wx.TextAttr(wx.BLUE))
self.text.AppendText(" thou ")
self.text.SetDefaultStyle(wx.TextAttr(wx.NullColour))
self.text.AppendText(string3)
self.text.SetDefaultStyle(wx.TextAttr(wx.BLUE))
self.text.AppendText(" thou ")
self.text.SetDefaultStyle(wx.TextAttr(wx.NullColour))
self.text.AppendText(string4)
self.text.SetDefaultStyle(wx.TextAttr(wx.BLUE))
self.text.AppendText(" thou ")
self.text.SetDefaultStyle(wx.TextAttr(wx.NullColour))
self.text.AppendText(string5)
self.text.SetDefaultStyle(wx.TextAttr(wx.BLUE))
self.text.AppendText(" thou ")
self.text.SetDefaultStyle(wx.TextAttr(wx.NullColour))
self.text.AppendText(string6)
self.text.SetDefaultStyle(wx.TextAttr(wx.BLUE))
self.text.AppendText(" thou ")
self.text.SetDefaultStyle(wx.TextAttr(wx.NullColour))
self.text.AppendText(string7)
self.SetSize((300,300))
self.Centre()
self.Show(True)
def main():
app=wx.App()
Quote()
app.MainLoop()
if __name__ == '__main__':
main()
![введите здесь описание изображения](https://i.stack.imgur.com/7vZTp.png)
person
Rolf of Saxony
schedule
20.09.2017