首页 文章

wxpython中派生的面板类

提问于
浏览
1

在我的wxpython程序中,我的面板的行为有所不同,具体取决于我是将其设为派生类还是直接面板实例:

import wx

class PanelWithText(wx.Panel):
    def __init__(self, parent):
        super(PanelWithText, self).__init__(parent)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        panel1 = wx.Panel(parent)
        st1 = wx.StaticText(panel1, label='Some Text')
        hbox1.Add(st1)

class Example(wx.Frame):

    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title=title,
            size=(390, 350))

        panel = wx.Panel(self)

        vbox = wx.BoxSizer(wx.VERTICAL)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)                  # comment out from here
        panel1 = wx.Panel(panel)                            #
        st1 = wx.StaticText(panel1, label='Some Text')      #
        hbox1.Add(st1)                                      # to here
        # panel1 = PanelWithText(panel)
        vbox.Add(panel1)

        panel.SetSizer(vbox)

        self.Centre()
        self.Show()

if __name__ == '__main__':

    app = wx.App()
    Example(None, title='Example')
    app.MainLoop()

如果我按原样运行,它看起来很好 . 如果我运行它注释掉创建panel1的四行并取消注释使用派生类创建panel1的行,则“Some Text”将被剪切并仅显示“Sor” . 当我做一个非平凡的计划时,更糟糕的事情开始发生 .

这两个看起来和我一模一样 . 有什么不同?

我正在使用:Python 2.7.6 wxpython 3.0.0.0 Mac Yosemite 10.10.2

1 回答

  • 1

    问题在于养育子女 . 问题是在第一个示例中,您将 StaticText 窗口小部件的父设置正确设置为 panel1 . 在 PanelWithText 类中,将其父级设置为顶级面板而不是面板类,这是不正确的 . 这是一个固定的例子:

    import wx
    
    class PanelWithText(wx.Panel):
        def __init__(self, parent):
            super(PanelWithText, self).__init__(parent)
    
            hbox1 = wx.BoxSizer(wx.HORIZONTAL)
            st1 = wx.StaticText(self, label='Some Text')
            hbox1.Add(st1)
    
    class Example(wx.Frame):
    
        def __init__(self, parent, title):
            super(Example, self).__init__(parent, title=title,
                size=(390, 350))
    
            panel = wx.Panel(self)
    
            vbox = wx.BoxSizer(wx.VERTICAL)
    
            #hbox1 = wx.BoxSizer(wx.HORIZONTAL)                  # comment out from here
            #panel1 = wx.Panel(panel)                            #
            #st1 = wx.StaticText(panel1, label='Some Text')      #
            #hbox1.Add(st1)                                      # to here
            panel1 = PanelWithText(panel)
            vbox.Add(panel1)
    
            panel.SetSizer(vbox)
    
            self.Centre()
            self.Show()
    
    if __name__ == '__main__':
        import wx.lib.mixins.inspection
        app = wx.App()
        Example(None, title='Example')
        wx.lib.inspection.InspectionTool().Show()
        app.MainLoop()
    

相关问题