wxpython自定义面板在显示异常的框架中重用

时间:2018-05-31 03:40:02

标签: wxpython

请参阅下面的代码,我的WxPython版本是4.0.1,我想自定义基于wxPanel的组件并在wxFrame中重用它。显示第二个对象是不寻常的,我无法找到我的代码的任何错误,必须有一些我不知道的,有人帮助,非常感谢你!

import wx

class ListPl(wx.Panel):
    def __init__(self, parent, size=(200, 200), pos=(0, 0), index=-1):
        wx.Panel.__init__(self, parent=parent, pos=pos, size=(100, 100))
        self.t1 = wx.StaticText(self, label="Test1")
        self.t2 = wx.StaticText(self, label="Test2")
        self.t3 = wx.StaticText(self, label="Test3")
        self.t1.SetBackgroundColour("RED")
        self.t2.SetBackgroundColour("YELLOW")
        self.t3.SetBackgroundColour("BLUE")

        self.vbox = wx.BoxSizer(wx.VERTICAL)
        self.vbox.Add(self.t1, proportion=0, flag=wx.ALL)
        self.vbox.Add(self.t2, proportion=0, flag=wx.ALL)
        self.vbox.Add(self.t3, proportion=0, flag=wx.ALL)
        self.SetSizer(self.vbox)
        self.SetBackgroundColour((size[0], size[1], 120+index*100))

import wx
from ListPl import ListPl


class TestFrame(wx.Frame):
    def __init__(self, parent, size=(960, 639)):
        wx.Frame.__init__(self, parent, title="test", size=size)
        self.lp = ListPl(self, size=(100, 100), index=1)
        self.lp2 = ListPl(self, size=(100, 100), index=2)
        rs = wx.BoxSizer(wx.VERTICAL)
        rs.Add(self.lp, flag=wx.ALL)
        rs.Add(self.lp2, flag=wx.ALL)
        self.SetSizer(rs)


if __name__ == "__main__":
    app = wx.App()
    TestFrame(None).Show()
    app.MainLoop()

test.png

1 个答案:

答案 0 :(得分:0)

您没有提到正在运行此环境的环境,因此请尝试直接从命令行运行它。它应该工作。
虽然,ListPl.py中的最后一行将覆盖您在statictext项上设置的背景颜色。请尝试将ListPl.py更改为以下内容:

import wx

class ListPl(wx.Panel):
    def __init__(self, parent, size=(200, 200), pos=(0, 0), index=-1):
        wx.Panel.__init__(self, parent=parent, pos=pos, size=(100, 100))
        self.t1 = wx.StaticText(self, label="Test1")
        self.t2 = wx.StaticText(self, label="Test2")
        self.t3 = wx.StaticText(self, label="Test3")
        self.t1.SetForegroundColour(wx.RED)
        self.t2.SetForegroundColour(wx.YELLOW)
        self.t3.SetForegroundColour(wx.BLUE)

        self.vbox = wx.BoxSizer(wx.VERTICAL)
        self.vbox.Add(self.t1, proportion=0, flag=wx.ALL)
        self.vbox.Add(self.t2, proportion=0, flag=wx.ALL)
        self.vbox.Add(self.t3, proportion=0, flag=wx.ALL)
        self.SetSizer(self.vbox)
        self.SetBackgroundColour((size[0], size[1], 120+index*100))

enter image description here