对现有的 wxPython 控件进行少量添加
Making small additions to an existing wxPython control
我正在尝试获取现有 wxPython 控件的行为并简单地在其上绘制一些图形。
下面的代码显示了我当前的尝试。如果我实例化 StaticTextUnderline
而不是 wx.StaticText
,它的行为完美,前者的行为与后者完全相同。换句话说,控件中显示的完全相同的文本(一段 20 行×20 个字符的乱码文本):
import wx
class StaticTextUnderline(wx.StaticText):
def __init__(self, parent, *args):
super(StaticTextUnderline, self).__init__(parent, *args)
self.Bind(wx.EVT_PAINT, self.OnPaint)
def OnPaint(self, e):
super(StaticTextUnderline, self).Update()
# dc = wx.PaintDC(self)
# pen = wx.Pen(wx.Colour(255,0,0))
# pen.SetWidth(1)
# dc.SetPen(pen)
# dc.DrawLine(0, 0, 50, 50)
注释代码的目的是在绘制静态文本后在文本上简单地绘制一条红线。不幸的是,instant 我取消了第一行的注释,控件不再呈现文本。我怀疑 获取另一个设备上下文可能会清除当前内容。如果我取消所有注释,我会看到红线,但如果底层静态文本已以某种方式被清除,这对我没有好处。
如何拦截任意 wxPython
控件并在其完成工作后仅 fiddle 包含内容?
好的,看起来最初的想法(第二个绘制设备上下文可能导致问题)是正确的。在最初尝试弄清楚如何获取 one 上下文并将其用于超类调用和 OnPaint
调用之后,事实证明您可以通过获取不同类型的设备上下文(一个客户端)。
文档中有关于在绘画事件中使用非绘画上下文(以及绘画事件之外的绘画上下文)的警告,但我怀疑这与 first 获得上下文。
所以下面的代码似乎可以工作,渲染基础文本 和 红线:
def OnPaint(self, e):
super(StaticTextUnderline, self).Update()
dc = wx.ClientDC(self)
pen = wx.Pen(wx.Colour(255,0,0))
pen.SetWidth(1)
dc.SetPen(pen)
dc.DrawLine(0, 0, 50, 50)
我正在尝试获取现有 wxPython 控件的行为并简单地在其上绘制一些图形。
下面的代码显示了我当前的尝试。如果我实例化 StaticTextUnderline
而不是 wx.StaticText
,它的行为完美,前者的行为与后者完全相同。换句话说,控件中显示的完全相同的文本(一段 20 行×20 个字符的乱码文本):
import wx
class StaticTextUnderline(wx.StaticText):
def __init__(self, parent, *args):
super(StaticTextUnderline, self).__init__(parent, *args)
self.Bind(wx.EVT_PAINT, self.OnPaint)
def OnPaint(self, e):
super(StaticTextUnderline, self).Update()
# dc = wx.PaintDC(self)
# pen = wx.Pen(wx.Colour(255,0,0))
# pen.SetWidth(1)
# dc.SetPen(pen)
# dc.DrawLine(0, 0, 50, 50)
注释代码的目的是在绘制静态文本后在文本上简单地绘制一条红线。不幸的是,instant 我取消了第一行的注释,控件不再呈现文本。我怀疑 获取另一个设备上下文可能会清除当前内容。如果我取消所有注释,我会看到红线,但如果底层静态文本已以某种方式被清除,这对我没有好处。
如何拦截任意 wxPython
控件并在其完成工作后仅 fiddle 包含内容?
好的,看起来最初的想法(第二个绘制设备上下文可能导致问题)是正确的。在最初尝试弄清楚如何获取 one 上下文并将其用于超类调用和 OnPaint
调用之后,事实证明您可以通过获取不同类型的设备上下文(一个客户端)。
文档中有关于在绘画事件中使用非绘画上下文(以及绘画事件之外的绘画上下文)的警告,但我怀疑这与 first 获得上下文。
所以下面的代码似乎可以工作,渲染基础文本 和 红线:
def OnPaint(self, e):
super(StaticTextUnderline, self).Update()
dc = wx.ClientDC(self)
pen = wx.Pen(wx.Colour(255,0,0))
pen.SetWidth(1)
dc.SetPen(pen)
dc.DrawLine(0, 0, 50, 50)