Кнопка выхода не работает - 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()
Я надеюсь, что это было полезно.