从Frame1中的按钮调用Frame2

时间:2014-06-19 09:04:43

标签: python button wxpython frame

我是python中的新bie,我必须调用一个框架" Frame2"当我在Frame1的一个按钮上点击时,我有这个错误:

enter image description here

这是我的代码:

global Frame2 fr
 def OnButton4Button(self, event):

        fr.Show()
        even.Skip()

注意:我使用wxpython和boa构造函数 谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

在您的短代码中,您在第二行有缩进,这是一个错误,您必须将其写成:

from Frame2 import fr
def OnButton4Button(self, event):

        fr.Show()
        event.Skip()

您可能会像以下示例一样尊重Python中的缩进:

global var
def function():
    #indented block
    #should be always on the same column
    condition = 1
    if condition:
        #new indented block
        #is also aligned on a column
        print "something"
    #this is out of the IF block
#call the function
function()

PEP8 recommendations中,您会找到避免缩进错误的规则。

答案 1 :(得分:1)

您的代码中有几个拼写错误。这是一个更正的例子:

from Frame2 import fr
def OnButton4Button(self, event):
    fr.Show()
    event.Skip()  # you need to spell event correctly

这假设 Frame2 是一个模块。大多数情况下,您不需要在Python中使用全局变量。

为了使这更容易理解,我写了一个在同一个模块中有一个MainFrame类和一个Frame2类的例子,所以你不必导入任何东西或使用全局变量:

import wx

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

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Frame2")
        panel = wx.Panel(self)



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

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Main Frame")
        panel = wx.Panel(self)

        button = wx.Button(panel, label="Open Frame2")
        button.Bind(wx.EVT_BUTTON, self.onButton)
        self.Show()

    #----------------------------------------------------------------------
    def onButton(self, event):
        """"""
        frame = Frame2()
        frame.Show()
        event.Skip()

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