在StaticText中更改单个字符的颜色

时间:2014-01-23 21:07:43

标签: python-2.7 wxpython

我正在编写一个程序,随机生成名人的加密引文。我的程序显示加密指针,用户必须解码报价。我想从哪个字母输入解码。我已经成功实现了它,当它们指定要解码的字母时(例如:“a = e”),程序用他们指定的文本替换加密文本。

我希望这样,当更换一个字母时,它会被涂成红色,以便用户可以跟上他们改变的字母。

def OnDec(self, e):
        dlg = wx.TextEntryDialog(self, "Which letter do you wish to change? Use format: 'a=e'", "Decode Letter", "")
        dlg.ShowModal()
        decode = dlg.GetValue()
        #Text entry filter
        match = re.search(r'\w+=\w+|^\d*$', decode)
        if not match:
            err = wx.MessageDialog(self, "That is not a correct entry format.", "Entry Error", style=wx.ICON_HAND)
            err.ShowModal()
        #Letter replacement
        origin = decode[0].upper()
        replace = decode[2].upper()
        for n in range(0, len(cryp)):
            if cryp[n] == origin:
                cryp[n] = replace
        self.txt.SetLabel("".join(cryp))
        self.txt.SetForegroundColour("RED")
        self.sizer.Layout()

此过程是按下“解码字母”按钮时执行的事件。 cryp这里是我从加密报价中创建的每个字母的列表。请求的decode变量格式为“a = b”。

我可以将整个label更改为RED,但我想改变已解码字母的颜色。

1 个答案:

答案 0 :(得分:1)

StaticText小部件不支持该行为。您可以使用只读wx.TextCtrl来执行此操作,该wx.TextCtrl启用了wx.TE_RICH或wx.TE_RICH2标志。否则,您可能只想使用wx.GCDC或wx.PaintDC绘制文本。那将更加灵活。