当我使用带有笔记本控件的自定义控件时,我会遇到奇怪的视觉效果。我设法将错误隔离到一个小程序。
我使用的是Python 2.7和wxPython,但尚未切换到Python 3。我有一个自定义控件,可以绘制“A”。我使用垂直Box sizer并绘制两个A,然后我绘制一个静态文本标签。第二个A最初是一个黑盒子,这就是虫子。如果我将窗口移出屏幕并重新打开,它就变成了第二个A.奇怪的是,只有当有两个标签时才会发生这种情况,如果我删除处理tab2的两行,则该bug就会消失。
另外,我将自定义控件基于以下链接。此链接使用复选框自定义控件,并且遇到与我的自定义控件相同的问题: https://wiki.wxpython.org/CreatingCustomControls
感谢任何帮助!
import wx
class MyControl(wx.PyControl):
def __init__(self, parent, size):
wx.PyControl.__init__(self, parent, style=wx.BORDER_NONE)
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
self.SetInitialSize(size)
def OnPaint(self, event):
dc = wx.BufferedPaintDC(self)
dc.Clear()
dc.DrawText("A", 0, 0)
def OnEraseBackground(self, event):
pass
class GUI(object):
def __init__(self):
app = wx.App(False)
windowFrame = wx.Frame(None)
windowFrame.SetSize((300, 300))
notebook = wx.Notebook(windowFrame)
tab1 = wx.Panel(notebook)
tab1Sizer = wx.BoxSizer(wx.VERTICAL)
tab1.SetSizer(tab1Sizer)
notebook.AddPage(tab1, "Tab1")
tab2 = wx.Panel(notebook)
notebook.AddPage(tab2, "Tab2")
myControl1 = MyControl(tab1, size=(20,20))
tab1Sizer.Add(myControl1)
myControl2 = MyControl(tab1, size=(20,20))
tab1Sizer.Add(myControl2)
label3 = wx.StaticText(tab1, label="Test3")
tab1Sizer.Add(label3)
windowFrame.Show()
app.MainLoop()
def main():
GUI()
main()