Search code examples
pythonbuttonwxpythonframe

call a Frame2 from a button in Frame1


I'am a new bie in python,I have to call a frame "Frame2" when I clic on a button from Frame1,I have this error:

enter image description here

this I my code:

global Frame2 fr
 def OnButton4Button(self, event):

        fr.Show()
        even.Skip()

NB:I work with wxpython,and boa constructor thanks fro help


Solution

  • You have several typos in your code. Here's a corrected example:

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

    This assumes that Frame2 is a module. Most of the time, you don't need to use globals in Python.

    To make this a bit easier to follow, I wrote an example that has a MainFrame class and a Frame2 class in the same module so you don't have to import anything or use globals:

    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()