我创建了一个仅显示引号的gui。如何将下面引用中“你”中的所有单词的颜色更改为蓝色?我尝试了 SetForegroundColour ,但它将整个文本更改为蓝色。
以下是代码:
import wx
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):
super().__init__(*args, **kwargs)
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(string)
self.text.SetForegroundColour("blue")
self.SetSize(300,300)
self.Centre()
self.Show(True)
def main():
app=wx.App()
Quote(None)
app.MainLoop()
if __name__ == '__main__':
main()
答案 0 :(得分:1)
您可能需要阅读RichTextCtrl
https://wxpython.org/Phoenix/docs/html/richtextctrl_overview.html
只需使用TextCtrl
即可
1 事后设置样式属性(感谢Robin的评论)或
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()