wxPython, измените цвет фона StyledTextCtrl

Я пытался (но ничего не происходит)

    self.txt.SetBackgroundColour ((255,0,0))

Как сказано в заголовке, я пытаюсь изменить цвет фона StyledTextCtrl. Кто-нибудь знает метод, который можно использовать? Я проверил документацию по API, но не смог найти ее, http://wxpython.org/docs/api/wx.stc.StyledTextCtrl-class.html

(под цветом фона я подразумеваю всю область письма, конечно)

Кто-нибудь знает, как я мог это сделать?

РЕДАКТИРОВАТЬ:

Фон не меняется в следующем коде

import wx
import wx.stc

app = wx.App(redirect=True)
top = wx.Frame(None, title="StyledTXTCtrl", size=(300,200))
txt=wx.stc.StyledTextCtrl(top)
txt.SetBackgroundColour((255,255,0))
txt.Refresh()
top.Show()
app.MainLoop()

2 ответа

Решение

Моей первой реакцией было позвонить txt.Refresh() потому что у меня был похожий опыт использования wx.TextCtrl, где цвет фона не обновлялся и Refresh() звонок заставил перерисовать. Однако, похоже, что подход был неверным.

После просмотра API StyledTextCtrl кажется, что SetBackground() это не та функция, которую вы хотите. Насколько я понимаю, поскольку STC могут иметь несколько стилей в одном блоке, отдельные стили текста имеют приоритет над настройками STC.

После некоторых исследований я обнаружил функцию StyleSetBackground(). Это изменяет стиль по умолчанию, так что фон будет красным, эффективно устанавливая фон красным. Вы должны назвать это так:

txt.StyleSetBackground(wx.stc.STC_STYLE_DEFAULT, (255,0,0))

Помните, что если вы используете несколько стилей, вам может потребоваться вызвать этот метод для каждого из них.

---РЕДАКТИРОВАТЬ---
Я забыл проверить код, введя какой-то текст. Оказывается, если все, что вы делаете, это позвонить SyleSetBackground() как я предлагаю выше, при вводе текста фон вводимого текста остается белым, а не ожидаемым красным.

Немного больше исследований, и я обнаружил, что это легко исправить, вызвав следующий код после установки цвета фона:

txt.StyleClearAll()

Я предполагаю, что при создании StyledTextCtrl он устанавливает стиль текста, равный wx.stc.STC_STYLE_DEFAULT, Все идет нормально. Однако после этого мы изменим значение стиля по умолчанию (сделав фон красным), так что теперь стиль текста и стиль по умолчанию изменились. Поэтому нам нужно вызвать StyleClearAll(), чтобы сбросить ВСЕ СТИЛИ обратно к стилю по умолчанию (который теперь имеет красный фон).

Это работает на моем компьютере просто отлично

self.txt.SetBackgroundColour((255,0,0))

какая у тебя ОС?

Другие вопросы по тегам