2014-05-09 3 views
0

Я разработал графический интерфейс с wxGlade и его работу. Но для начала GUI - я закодировал сценарий с некоторыми вариантами. Итак, все работает, но когда я нажимаю красную кнопку с «x», чтобы закрыть окно - приложение не останавливается.Кнопка выхода не работает - wxpython

Я сделал метод, вызываемый отдельной кнопкой выхода, которая вызывает функцию exit в моем скрипте. Но обычно пользователи используют кнопку закрытия (красная кнопка с 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»?

+0

Вы используете EVT_CLOSE событие в своей программе? Может быть, вы должны позвонить Destroy() после Close()? Трудно ответить, не зная структуру вашей программы и обработку событий. –

ответ

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

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

+0

Лучшим ответом, вероятно, будет 'event.Skip()' вместо 'self.Destroy()', чтобы вернуть управление обработчику событий по умолчанию. – nepix32

Смежные вопросы