如何将子框架保留在父级之上

时间:2013-12-06 19:51:32

标签: wxpython

我想知道如何将子帧保留在父帧之上,而不是模态。我尝试使用wx.FRAME_FLOAT_ON_PARENT,但我得到的是我的主框架顶部的灰框。无论我把它放在我的班级还是创建实例,结果都是一样的。

enter image description here

bob = DpxBob(self, title = 'DIO Info', btn = CLOSE|UPDATE, device = self.device,
      size=(730, 635), tabs=tabs, style=wx.FRAME_FLOAT_ON_PARENT)


class DpxFrame(wx.Frame):  
    def __init__(self, parent, title, btn, device, size, tabs=None):
        super(DpxFrame, self).__init__(parent, title=title, size=size,
                    style=wx.FRAME_FLOAT_ON_PARENT)

此外,它需要跨平台。任何帮助都会很感激。

P.S。:取得进步,但我仍然是OOP世界的新人。

1 个答案:

答案 0 :(得分:0)

部分问题是您还需要将wx.DEFAULT_FRAME_STYLE添加到子框架的样式列表中。这是一个适合我的例子:

import wx

########################################################################
class GenericPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent, showChild=False):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        if showChild:
            btn = wx.Button(self, label="Show Child")
            btn.Bind(wx.EVT_BUTTON, self.onShowChild)

    #----------------------------------------------------------------------
    def onShowChild(self, event):
        """"""
        frame = ChildFrame(self.GetParent())
        frame.Show()

########################################################################
class ChildFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Frame.__init__(self, parent, title="Child frame", 
                          style=wx.FRAME_FLOAT_ON_PARENT|wx.DEFAULT_FRAME_STYLE)
        panel = GenericPanel(self)
        self.Show()

########################################################################
class MainFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Main Frame", size=(800,600))
        panel = GenericPanel(self, showChild=True)
        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()

现在,如果你想将帧保持在主框架的范围内,那么你可能想要查看wx.aui中的MDI帧(或者更好的是,查看wx.lib.agw中的通用AUI) .aui)。 wxPython演示有各自的例子。