在wxpython中向TextCtrl发送彩色文本

0 投票
2 回答
4234 浏览
提问于 2025-04-16 02:14

我想在一个叫做TextCtrl的小部件里发送彩色文字,但我不知道怎么做。

style = wx.TE_MULTILINE|wx.BORDER_SUNKEN|wx.TE_READONLY|wx.TE_RICH2
self.status_area = wx.TextCtrl(self.panel, -1,
                               pos=(10, 270),style=style,
                               size=(380,150))

其实这段代码是用来在我的窗口里定义一个状态框的,我想在里面写一些彩色的日志信息。如果我直接用 self.status_area.AppendText("blah") 这样的方法,它会把文字加上去,但颜色总是黑色的。我找不到相关的文档来告诉我该怎么做。

2 个回答

0

wxwidgets的文档里提到(你也可以查查wxPython的文档,不过它其实也是指向wxwidgets的):你可以在往文本框里添加文字之前使用SetDefaultStyle,或者在插入文字后使用SetStyle。根据文档,第一种方法更有效率(而且我觉得听起来也更简单)。

3

你需要调用 SetStyle 来改变文本的表现方式。

import wx

class F(wx.Frame):
    def __init__(self, *args, **kw):
        wx.Frame.__init__(self, None)
        style = wx.TE_MULTILINE|wx.BORDER_SUNKEN|wx.TE_READONLY|wx.TE_RICH2
        self.status_area = wx.TextCtrl(self, -1,
                                       pos=(10, 270),style=style,
                                       size=(380,150))
        self.status_area.AppendText("blahblahhblah")
        fg = wx.Colour(200,80,100)
        at = wx.TextAttr(fg)
        self.status_area.SetStyle(3, 5, at)

app = wx.PySimpleApp()
f = F()
f.Show()
app.MainLoop()

撰写回答