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))
какая у тебя ОС?