wxPython中如何根据条件设置TextCtrl控件的文本颜色?
实现wx.TextCtrl按条件设置文本颜色的方法
wx.TextCtrl的write()方法没有直接设置文本颜色的参数,要实现答案正确时文本显示蓝色、错误时显示红色的需求,你可以通过SetDefaultStyle()方法在写入文本前设置对应样式,后续写入的文本会自动应用该样式。
以下是修改后的完整代码:
import wx import winsound enletters= ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] class lten(wx.Frame): def __init__(self, parent, school): super(lten,self).__init__(parent,-1, title= 'Education system, english letters') self.p = wx.Panel(self,-1) self.Center() self.lettern= 0 self.letter= enletters[self.lettern] wx.StaticText(self.p, -1, "answers: ") self.verify = wx.TextCtrl(self.p, -1, style=wx.TE_READONLY+wx.TE_MULTILINE+wx.HSCROLL) self.wt= wx.StaticText(self.p, -1, f"type {self.letter} ") self.write = wx.TextCtrl(self.p, -1) self.write.SetFocus() self.send= wx.Button(self.p, -1, "Submit the answer") self.send.Bind(wx.EVT_BUTTON, self.onsend) self.Show() def onsend(self, event): self.result= self.write.GetValue() if self.result == self.letter: # 设置后续文本为蓝色 self.verify.SetDefaultStyle(wx.TextAttr(wx.Colour("blue"))) self.verify.write(f'true {self.letter}\n') winsound.PlaySound('data\\yes.wav', 1) self.lettern = (self.lettern + 1) % 26 self.letter= enletters[self.lettern] self.wt.SetLabel(f"type {self.letter} ") self.write.SetFocus() self.write.SetValue("") elif self.result != self.letter: # 设置后续文本为红色 self.verify.SetDefaultStyle(wx.TextAttr(wx.Colour("red"))) self.verify.write(f'no\n') winsound.PlaySound('data\\no.wav', 1) self.write.SetFocus() self.write.SetValue("") app = wx.App() lten(None, None) app.MainLoop()
关键修改说明:
- 在写入文本前调用
self.verify.SetDefaultStyle(wx.TextAttr(wx.Colour("blue")))或wx.Colour("red"),指定后续文本的颜色 - 简化了字母索引的切换逻辑,用
(self.lettern + 1) % 26替代原有的判断,更简洁高效
内容的提问来源于stack exchange,提问作者ibraheem mohsen
相关产品推荐
相关产品推荐

