如何解决对现有的 wxPython 控件进行少量添加
我正在尝试获取现有 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))
# pen.SetWidth(1)
# dc.SetPen(pen)
# dc.DrawLine(0,50,50)
注释代码旨在简单地在绘制静态文本后在文本上绘制一条红线。不幸的是,当我取消注释第一行的即时时,控件不再呈现文本。我怀疑获取另一个设备上下文可能正在清除当前内容。如果我取消对所有内容的注释,我会得到红线,但如果底层静态文本以某种方式被清除,这对我来说没有好处。
如何拦截任意的 wxPython
控件并在其完成工作后对其内容进行处理?
解决方法
好的,所以它看起来原始想法(第二个绘制设备上下文可能导致问题)是正确的。在最初尝试弄清楚如何获取one 上下文并将其用于超类调用和 OnPaint
调用之后,结果证明您可以通过获取不同类型的设备上下文(客户端)。
文档中有关于在绘制事件中使用非绘制上下文(以及绘制事件之外的绘制上下文)的警告,但我怀疑这与 first 上下文有关获得。
所以下面的代码似乎可以工作,将底层文本和渲染为红线:
def OnPaint(self,e):
super(StaticTextUnderline,self).Update()
dc = wx.ClientDC(self)
pen = wx.Pen(wx.Colour(255,0))
pen.SetWidth(1)
dc.SetPen(pen)
dc.DrawLine(0,50,50)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。