4

我试过(但没有任何反应)

    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()
4

2 回答 2

5

我的第一反应是打电话txt.Refresh(),因为我在使用 wx.TextCtrl 时也有类似的经历,其中背景颜色没有更新并且Refresh()调用强制重绘。但是,这种方法似乎是不正确的。

在查看StyledTextCtrl API之后,似乎SetBackground()不是您想要的功能。我的理解是,因为 STC 可以在同一个框中有多种样式,所以单个文本样式优先于 STC 的设置。

经过一番研究,我发现了StyleSetBackground()函数。这会修改默认样式,使背景变为红色,从而有效地将背景设置为红色。你需要这样称呼它:

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

请记住,如果您使用多种样式,您可能需要为每个样式调用此方法。

---编辑---
我忘记通过输入一些文本来检查我的代码。事实证明,如果你所做的只是SyleSetBackground()像我上面建议的那样调用,当你输入文本时,输入文本的背景仍然是白色,而不是预期的红色。

进行更多研究,我发现这很容易通过在设置背景颜色后调用以下代码来解决:

txt.StyleClearAll()

我的猜测是,当您创建 StyledTextCtrl 时,它会将文本样式设置为等于wx.stc.STC_STYLE_DEFAULT. 到现在为止还挺好。但是,在这一点之后,我们更改了默认样式的值(通过使背景变为红色),所以现在文本样式和默认样式不同了。因此,我们需要调用StyleClearAll()将所有样式重置为默认样式(现在具有红色背景)。

于 2012-06-03T01:51:58.757 回答
2

这在我的电脑上工作得很好

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

你的操作系统是什么?

于 2012-06-02T23:35:38.480 回答