【问题标题】:pyqt graceful logout my app when user signs off当用户注销时,pyqt 优雅地注销我的应用程序
【发布时间】:2017-03-26 05:37:06
【问题描述】:

当我的应用程序运行时,如果用户注销我想弹出一个窗口显示一些信息并确认注销

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

问题是它没有进入那个槽方法。

我的应用程序没有主窗口,它的界面通过托盘图标。

【问题讨论】:

  • 你能提供一个简单的工作示例来演示这个问题吗?
  • “它没有进入那个插槽”可能有许多不同的原因。您的代码不足以重现问题,因为 self.commitDataRequest 未在其他代码中定义。
  • 根据 qt-project.org/doc/qt-4.8/… ,我需要做的就是重写该方法。无论如何,这个错误似乎已经记录在案bugreports.qt-project.org/browse/QTBUG-33034

标签: python pyqt pyqt5 session-management


【解决方案1】:

你需要覆盖你的 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()

【讨论】:

    【解决方案2】:

    看起来和Prompt on exit in PyQt application一样。

    就像你可以询问用户他/她是否真的想退出一样。相反,您将显示一些信息,然后提出问题。

    答案:

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

    【讨论】:

    • 不同的用例。我的应用程序没有主窗口,它的界面是通过托盘图标。而且我不想在每次关闭窗口时都提示用户。
    猜你喜欢
    • 2019-09-20
    • 2021-01-16
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    相关资源
    最近更新 更多