Python中的桌面应用程序,具有多个框架!

时间:2010-10-14 21:17:33

标签: python wxpython

我在Delphi / Pascal中开发了许多桌面应用程序 - 在这里,我使用了模态形式。

//Mainform
Form1:= TForm1.Create(Self);  
If Form1.Showmodal =mrOK then ….  
In Form1 you cal call vars in Mainform like mainform.X := 1  

(我知道 - 我正常使用try,最后除外)

我现在将切换到Python,我的问题如下:

我想要一个带有主窗口(框架)的应用程序,您可以在其中调用多个可以包含表单的表单等等

我可以使用python和wxpython创建一个程序,其中主框架创建一个新框架并显示它 - 但我如何回来 - 以及如何引用父框架 - 如果可能的话!

来自mainform

Def OnButton1(self, event):  
    self.main2 = Frame2.create(None)  
    self.main2.Show()  
    self.Hide()  

当我在main2完成后,我将返回到mainform - 它是隐藏的!!

我知道我可以使用对话框,但我需要一个正常的框架!! 我正在寻找的是一个小程序,其中有一个大型机 - 一个调用Frame(Frame1)的按钮,它有一个调用框架的按钮(Frame1A)

我是Python的新手,但已经在C,C ++,Pascal中创建了许多应用程序 我看了几乎所有的演示,但没有一个能给我一个提示!

此致 米克

2 个答案:

答案 0 :(得分:1)

好奇,为什么不能使用对话框?

无论如何,一个简单的解决方案是为Frame2的构造函数提供一个回调函数,当Frame2即将关闭时调用它。


class Frame2(wx.wxFrame):
    def __init__(self, parent, callback, ...)
        wx.wxFrame(self, parent)
        self._callback = callback
        self.bind(wx.EVT_CLOSE, self.OnClose(), self)

    def OnClose():
        self.Destroy()
        self._callback()

class Frame1(...):
    ...

    def OnButton1(self, event):
        self.main2 = Frame2(self, self.OnButton1Callback)
        self.main2.Show()
        self.Hide()

    def OnButton1Callback(self)
        self.Show()

    ...

上面的代码只是一个提示,从未经过测试!

答案 1 :(得分:1)

有几种方法可以获得对主框架的引用。创建辅助帧时,可以将它们传递给None或父级。如果您将主框架作为父框架传递,那么您可以轻松地引用它。

或者,你可以这样做:

topFrame = wx.GetTopLevelParent()

至于显示辅助框架并隐藏主框架,我所做的是使用Pubsub。当我打开辅助框架时,我隐藏了主框架。当我关闭辅助帧时,它会向被捕获的隐藏主帧发送pubsub消息,并重新显示主帧。

wxPython wiki上有很多pubsub示例。还有我写的这篇文章:

http://www.blog.pythonlibrary.org/2010/06/27/wxpython-and-pubsub-a-simple-tutorial/

希望有所帮助!