python - 如何使用 wxpython 在 1 个应用程序中放置 2 个框架?

标签 python wxpython wxwidgets

你好,我已经创建了 2 个框架,当我运行这个程序时,它会将每个框架显示为它们自己的应用程序(至少在 Windows 上是这样)。有没有办法同时使用这两个框架并将它们放在一个应用程序中?

import wx

class MainFrame(wx.Frame): 
    def __init__(self): 
        wx.Frame.__init__(self, None, wx.NewId(), "Main") 
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.button = wx.Button(self, wx.NewId(), "Open a child")
        self.sizer.Add(self.button, proportion=0, border=2, flag=wx.ALL)
        self.SetSizer(self.sizer)
        self.button.Bind(wx.EVT_BUTTON, self.on_button)

        self.Layout()

    def on_button(self, evt):
        frame = ChildFrame(self)
        frame.Show(True)
        frame.MakeModal(True)

class ChildFrame(wx.Frame): 
    def __init__(self, parent): 
        wx.Frame.__init__(self, parent, wx.NewId(), "Child")
        self.Bind(wx.EVT_CLOSE, self.on_close)

    def on_close(self, evt):
        self.MakeModal(False)
        evt.Skip()

class MyApp(wx.App):
    def OnInit(self):
        frame = MainFrame()
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

app = MyApp(0)
app.MainLoop()    

这是我不想要的图像: http://i.stack.imgur.com/7gayc.png

那是我不想要的, 我希望两个框架都在一个应用程序中。

最佳答案

这些框架已经在同一个 wxPython 应用程序(MyApp)中运行。
可能你的意思是在同一个 wxPython 窗口中有两个框架/窗口。

我认为这是不可能的,因为根据定义,wx.Frame 类是一个独立的窗口。

你可以很容易地做的是修改你当前的类以从 wx.Panel 派生而不是从 wx.Frame 派生,然后将两个面板放在同一个通用框架。

例如,对于您修改如下的 ChildFrame:

class ChildPanel(wx.Panel): 
    def __init__(self, parent): 
        wx.Panel.__init__(self, parent, wx.NewId())
    .........................................

然后您创建通用框架并实例化您的面板(并将它们设置在 sizer 中):

class Common(wx.Frame): 
    def __init__(self, parent): 
        wx.Frame.__init__(self, parent, wx.NewId(), "Common")
        self.Bind(wx.EVT_CLOSE, self.on_close)

        self.child = ChildPanel(self, .....)
        self.main = MainPanel(self, .....)

        ................... 

如果按照 Inerdial 评论中的建议,您实际上是在寻找 MDI 窗口:

enter image description here

然后你必须使用wx.MDIParentFrame 和wx.MDIChildFrame 的类。例如,查看 wxPython docs and demos 中的 MDIDemo.py 示例包裹。请注意,虽然 wxPython 支持多文档界面窗口,但 Windows 已经弃用了 MDI。

关于python - 如何使用 wxpython 在 1 个应用程序中放置 2 个框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8278978/

相关文章:

python - 每次创建父对象时创建外键对象的实例

python - 在 Python 中对 CSV 进行排序

python - 通过将参数传递给定义来缩短 GUI 代码

python - WxPython PySerial 和 Wx.Terminal - 线程无法更新 GUI

c++ - WXWidgets Sizers 在侧面留下一个空隙

c++ - 如何在事先不知道数量的情况下构造一个带有添加条目选项的 wxListBox?

python - 无法连接 django 和 Angular 2

python - Pandas:始终选择 Excel 工作表中的第一个工作表/选项卡

python - wxPython:禁用笔记本选项卡?

c++ - 非法引用非静态成员或未解析的外部符号