wxPython:使用带有笔记本控件的自定义控件时出现奇怪的视觉瑕疵

时间:2017-02-27 06:38:57

标签: python wxpython

当我使用带有笔记本控件的自定义控件时,我会遇到奇怪的视觉效果。我设法将错误隔离到一个小程序。

我使用的是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()

0 个答案:

没有答案