作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用wxPython Canvas ' AddScaledTextBox(...)
创建缩放文本框。
参见here例如:
Box = Canvas.AddScaledTextBox("A Two Line\nString",
Point,
2,
BackgroundColor = "Yellow",
LineColor = "Red",
LineStyle = "Solid",
PadSize = 5,
Family = wx.TELETYPE,
Position = 'bl')
定义文本框后如何更改背景颜色?(例如用户输入 => 背景颜色更改)
最佳答案
很确定这是一个错误。请参阅lines 1841 - 1845 in the wxPython source - 有一个对 self.BackgroundColor
的引用,但从未使用过。
因此,对于您的示例,您需要设置与文本框关联的画笔的颜色。我根据 Robin Dunn 的示例编写了以下内容。函数SetBoxBackground
是重要的部分。
如评论中所述,仅调用 box.Brush.SetColour(color)
或 box.Pen.SetColour(color)
可能会导致问题:如果您有两个具有相同颜色的文本框,更改其中一个的画笔/笔颜色也会影响另一个。 (我不是 100% 确定,但我认为这是因为缓存,例如参见 this comment in the source 。)
import wx
from wx.lib.floatcanvas import FloatCanvas
class TestFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.canvas = FloatCanvas.FloatCanvas(self, BackgroundColor = "black")
MainSizer = wx.BoxSizer(wx.VERTICAL)
MainSizer.Add(self.canvas, 4, wx.EXPAND)
self.SetSizer(MainSizer)
self.box = self.canvas.AddScaledTextBox("A Two Line\nString",
(0,10),
2,
BackgroundColor = "Yellow",
LineColor = "Red",
LineStyle = "Solid",
PadSize = 5,
Family = wx.TELETYPE,
Position = 'bl')
self.box2 = self.canvas.AddScaledTextBox("Second Box",
(0,0),
2,
BackgroundColor = "Yellow",
LineColor = "Red",
LineStyle = "Solid",
PadSize = 5,
Family = wx.TELETYPE,
Position = 'bl')
self.box.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.OnRectDown)
wx.CallAfter(self.canvas.ZoomToBB)
def OnRectDown(self, event):
print ('Rectangle: Left Button down clicked at:', event.HitCoords)
if self.box.Color == 'red':
self.SetBoxBackground('green', "Solid")
self.box.SetColor('black')
else:
self.SetBoxBackground('white', "Solid")
self.box.SetColor('red')
self.canvas.ClearBackground()
self.canvas.Refresh()
self.canvas.Draw(True)
def SetBoxBackground(self, color, style, linewidth=1):
# See https://github.com/wxWidgets/wxPython/blob/master/wx/lib/floatcanvas/FloatCanvas.py#L1841
# Create a new brush (fill) with specified color
self.box.SetBrush(color, style)
# Create a new pen (line) with specified color
self.box.SetPen(color, style, linewidth)
self.box.SetBackgroundColor(color) # Now this works correctly
app = wx.App(0)
frame = TestFrame(None, title="Test")
frame.Show(True)
app.MainLoop()
关于python - 更改 Canvas ScaledText 的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41070918/
我正在使用wxPython Canvas ' AddScaledTextBox(...) 创建缩放文本框。 参见here例如: Box = Canvas.AddScaledTextBox("A Two
我是一名优秀的程序员,十分优秀!