【问题标题】:wxPython gridbagsizer colourwxPython gridbagsizer 颜色
【发布时间】:2020-03-25 15:21:02
【问题描述】:

我正在使用应用程序进行测试。 现在我想在中间面板周围有一个漂亮的边框,所以它嵌入到另一个面板中。 但是,当我想在其中添加一个 gridbagsize 并将静态文本组件放入其中时,它会获取主面板的颜色,而不是中间面板的颜色。 显然我做错了什么......

代码:

    #Parent panel
    pnl = wx.Panel(self)
    pnl.SetBackgroundColour('#4f5049')

    vbox = wx.BoxSizer(wx.VERTICAL)

    midPan = wx.Panel(pnl)
    midPan.SetBackgroundColour('#ededed')

    vbox.Add(midPan,wx.ID_ANY, wx.EXPAND |wx.ALL, 20)

    sizer = wx.GridBagSizer(10,5)
    #sizer.
    st1=wx.StaticText(pnl,label='TEST')
    sizer.Add(st1, pos=(1,1),flag=wx.ALL,border=5)
    midPan.SetSizer(sizer)
    #vbox.Add(sizer,wx.ID_ANY, wx.EXPAND |wx.ALL, 0)
    #draw application       
    pnl.SetSizer(vbox)

如您所见,sizer 似乎被添加到 pnl 而不是 midPan... 我做错了什么?

【问题讨论】:

    标签: python python-3.x wxpython


    【解决方案1】:

    您将 statictext 定义为 pnl 的子级而不是 midPan

    import wx
    
    class MyFrame(wx.Frame):
        def __init__(self, parent, id=wx.ID_ANY, title="", size=(360,100)):
            super(MyFrame, self).__init__(parent, id, title, size)
            pnl = wx.Panel(self)
            pnl.SetBackgroundColour('#4f5049')
    
            vbox = wx.BoxSizer(wx.VERTICAL)
    
            midPan = wx.Panel(pnl)
            midPan.SetBackgroundColour('green')
    
            vbox.Add(midPan,wx.ID_ANY, wx.EXPAND |wx.ALL, 20)
    
            sizer = wx.GridBagSizer(10,5)
            st1=wx.StaticText(midPan,label='Black on green')
            st2=wx.StaticText(midPan,label='White on green')
            st2.SetForegroundColour('white')
            st3=wx.StaticText(midPan)
            st3.SetLabelMarkup("<span foreground='black' background='red'>Black on red</span>")
            st4=wx.StaticText(midPan)
            st4.SetLabelMarkup("<span foreground='white' background='red'>White on red</span>")
    
            sizer.Add(st1, pos=(1,1),flag=wx.ALL,border=5)
            sizer.Add(st2, pos=(2,2),flag=wx.ALL,border=5)
            sizer.Add(st3, pos=(3,3),flag=wx.ALL,border=5)
            sizer.Add(st4, pos=(4,1),flag=wx.ALL,border=5)
    
            midPan.SetSizer(sizer)
            pnl.SetSizer(vbox)
            self.Show()
    
    if __name__ == "__main__":
        app = wx.App()
        frame = MyFrame(None,title="The Main Frame")
        app.MainLoop()
    

    【讨论】:

    • 大错特错!非常感谢罗尔夫!它现在起作用了……作为一种魅力
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2011-10-31
    • 1970-01-01
    相关资源
    最近更新 更多