请参阅下面的代码,我的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()
答案 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))