wxPython,更改StyledTextC的背景色

2024-06-24 12:08:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试过了(但什么也没发生)

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

如标题中所述,我正在尝试更改背景颜色样式extctrl。有人知道可以使用的方法吗?我已经检查了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()

Tags: 方法importselftxtapp标题颜色top
2条回答

我的第一个反应是调用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()来将所有样式重置回默认样式(它现在有一个红色背景)。

这在我的电脑上很管用

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

你的操作系统是什么?

相关问题 更多 >