You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:45:45