Кнопка выхода не работает - wxpython

Я разработал графический интерфейс с wxGlade, и он все еще работает. Но для запуска GUI - я написал скрипт с некоторыми вариантами. Так что все работает, но когда я нажимаю красную кнопку с "х", чтобы закрыть окно - приложение не останавливается.

Я создал метод, вызываемый отдельной кнопкой выхода, который вызывает функцию выхода в моем скрипте. Но обычно пользователи используют кнопку закрытия (красная кнопка с буквой X), поэтому мой метод не используется для закрытия окна, и окно в конечном итоге не закрывается.

Это функция выхода.

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

Как я могу использовать эту функцию с красной кнопкой с "x"?

1 ответ

Решение

Насколько я понимаю ваш вопрос, ваше приложение не закрывается, когда вы нажимаете кнопку закрытия (красная кнопка с X в правом верхнем углу.)

По умолчанию, когда вы нажимаете кнопку закрытия, ваше приложение должно закрываться. В вашем случае мне кажется, что вы связали EVT_CLOSE к какому-либо методу, в котором нет кода, чтобы закрыть окно приложения. Например, рассмотрим фрагмент кода ниже, я намеренно связать EVT_CLOSE событие в методе с именем как closeWindow(), Этот метод ничего не делает, поэтому у меня есть pass Ключевое слово там. Теперь, если вы выполните приведенный ниже фрагмент кода, вы увидите, что окно приложения не закроется.

Код:

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

Итак, чтобы закрыть окно приложения, вам нужно изменить closeWindow(), Например: следующий фрагмент кода будет использовать Destroy(), чтобы закрыть окно приложения при нажатии на кнопку закрытия.

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

Я надеюсь, что это было полезно.

Другие вопросы по тегам