2014-09-10 5 views
0

Когда мое приложение работает, если пользователь выходит из системы я хотел бы всплывающее окно отображения некоторую информацию и подтверждающие выход из системыPyQt изящный выход из моего приложения, когда пользователь подписывает прочь

class MyApp(QtWidgets.QApplication): 

    def __init__(self, *args, **kwargs): 
     super(MyApp, self).__init__(*args, **kwargs) 
     self.commitDataRequest.connect(lambda manager: self.commitData(manager)) 

    @QtCore.pyqtSlot(QtGui.QSessionManager) 
    def commitData(self, manager): 
     print 'shutdown' 

if __name__ == '__main__': 
    qapplication = MyApp(sys.argv) 
    QtWidgets.QApplication.setQuitOnLastWindowClosed(False) #interaction through tray icon 
    application.exec_() 

Вопрос заключается в том, что это не войдя в этот слот-метод.

Мое приложение не имеет главного окна, его интерфейсы через значок в трее.

+1

Можете ли вы предоставить минималистичный рабочий пример, демонстрирующий эту проблему? –

+0

«он не входит в этот слот» может иметь много разных причин. Недостаточно вашего кода, чтобы воссоздать проблему, потому что self.commitDataRequest не определен среди других. – Trilarion

+0

в соответствии с http://qt-project.org/doc/qt-4.8/session.html#protocols-and-support-on-different-platforms, переопределяя этот метод, все, что мне нужно сделать. В любом случае, эта ошибка уже задокументирована. Https://bugreports.qt-project.org/browse/QTBUG-33034 – mingxiao

ответ

-1

Он выглядит так же, как Prompt on exit in PyQt application.

Как вы можете спросить пользователя, действительно ли он действительно хочет выйти или нет. Вместо этого вы покажете некоторую информацию, а затем зададите вопрос.

Ответ:

https://stackoverflow.com/a/1414906/2681662

+0

не такой же вариант использования. Мое приложение не имеет главного окна, его интерфейс находится через значок в трее. И я не хочу запрашивать пользователя каждый раз, когда окно закрывается. – mingxiao

0

Вам нужно более ездить на QtWidget:

def closeEvent(self, event): 

    quit_msg = "Are you sure you want to exit the program?" 
    reply = QtGui.QMessageBox.question(self, 'Message', 
        quit_msg, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) 

if reply == QtGui.QMessageBox.Yes: 
    event.accept() 
else: 
    event.ignore() 

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

  • Нет связанных вопросов^_^