gpt4 book ai didi

python - 更改 Canvas ScaledText 的背景颜色

转载 作者:行者123 更新时间:2023-12-01 03:29:38 28 4
gpt4 key购买 nike

我正在使用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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com