Я пытаюсь отправить цветной текст в виджет 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"), он добавит текст, как я хочу, но он всегда будет черным. Я не могу найти документацию, как это сделать.

0
priestc 3 Авг 2010 в 12:30

2 ответа

Лучший ответ

Вам нужно вызвать 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()
3
Rudi 3 Авг 2010 в 08:53

документация по wxwidgets говорит об этом (вы также можете посмотреть документы wxPython, но он все равно указывает на wxwidgets): либо используйте SetDefaultStyle перед добавлением текста в свой textctrl, либо после вставки текста используйте SetStyle. Согласно документации, первое решение более эффективно (и мне кажется, что оно проще).

0
Yoni H 3 Авг 2010 в 08:56