I developed a GUI with wxGlade and its still working. But to start the GUI - I coded a script with some choices. So everything works but when I push the red button with the "x" to close the window - the application doesn´t stop.

I made a method, called by a separate exit button, which calls an exit-function in my script. But normally the users are using the close button (red button with X) so my method is not being used to close the window and the window doesn't get closed ultimately.

This is the exit-function.

def stopExport(self, event):                      # wxGlade: MyFrame.<event_handler>
    self.Close()  # close the Frame
    from ExportManager import Exportmanager       # import the exit function
    Exportmanager().exit()                        # call it

How can I use this function with the red button with the "x"?

有帮助吗?

解决方案

As per my understanding of your question, your application is not closing when you click on the close button (The red button with X on the right top corner.)

By default when you click the close button your application should close. In your case it seems to me that you have bind the EVT_CLOSE to some method, which has no code in it to close the app window. For eg. consider the code snippet below, I have intentionally bind the EVT_CLOSE event to a method named as closeWindow(). This method does nothing that is why I have the pass keyword there. Now if you execute the code snippet below you can see that the app window won't close.

Code:

import wx
class GUI(wx.Frame):
    def __init__(self, parent, id, title):
        screenWidth = 500
        screenHeight = 400
        screenSize = (screenWidth,screenHeight)
        wx.Frame.__init__(self, None, id, title, size=screenSize)
        self.Bind(wx.EVT_CLOSE, self.closeWindow)  #Bind the EVT_CLOSE event to closeWindow()

    def closeWindow(self, event):
        pass #This won't let the app to close

if __name__=='__main__':
    app = wx.App(False)
    frame = GUI(parent=None, id=-1, title="Problem Demo-PSS")
    frame.Show()
    app.MainLoop()

So, in order to close the app window you need to change the closeWindow(). For eg: Following code snippet will use the Destroy() close the app window when you click on the close button.

import wx

class GUI(wx.Frame):
    def __init__(self, parent, id, title):
        screenWidth = 500
        screenHeight = 400
        screenSize = (screenWidth,screenHeight)
        wx.Frame.__init__(self, None, id, title, size=screenSize)
        self.Bind(wx.EVT_CLOSE, self.closeWindow)  #Bind the EVT_CLOSE event to closeWindow()

    def closeWindow(self, event):
        self.Destroy() #This will close the app window.


if __name__=='__main__':
    app = wx.App(False)
    frame = GUI(parent=None, id=-1, title="Problem Demo-PSS")
    frame.Show()
    app.MainLoop()

I hope it was useful.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top