【问题标题】:Pyside applications not closing properlyPyside 应用程序未正确关闭
【发布时间】:2014-07-06 15:17:27
【问题描述】:

我最近开始使用 PySide 进行 GUI 编程,但遇到了关于退出命令的奇怪问题。 Sys.exit([x]) 似乎被广泛用于停止 PySide 程序;但是,每当我在使用类的 PySide 程序中使用它时,它都不会向 PyCharm 返回退出代码或停止任务管理器中的 Python 进程。

奇怪的是,使用 PySide 时似乎很难做到这两件事;我可以跳出主循环,调用sys.exit(0)、raise SystemExit(0),它不会停止在后台运行。 only 在使用 PySide 时发生,only 在使用类构造小部件时发生。

我尝试了各种组合,但我可以可靠地终止进程的唯一方法是使用os._exit(0),这有点残酷。奇怪的是,我似乎是遇到这个问题的少数人之一,我很好奇是什么原因造成的。

我通过使用来自Zetcode 的sys.exit(app.exec_()) 运行Pyside 教程脚本验证了这不是我的代码本身的错误。同样,调用 sys.exit() 并没有返回退出值或终止 Python 进程。因为这是一个教程,我假设对于大多数人来说,这段代码工作得很好。这可能是版本问题(我使用 Python 3.4 和 PySide 1.2.2)吗?

编辑;我还发现将 sys.exit(0) 命令放在哪里并不重要,只要它在我的类定义之后。 Imports > sys.exit() > class 立即退出(正如人们所期望的那样),但 Imports > class > sys.exit() - 即使我还没有真正调用任何类 - 也没有正确关闭程序.

【问题讨论】:

标签: python-3.x pyside pycharm exit-code


【解决方案1】:

我没有看到这种行为。这意味着我可以使用sys.exit 来停止 PySide 程序。但是我更经常使用app.quit,其中app 是QApplication 实例。

例子:

import sys
from PySide import QtGui

class MyWindow(QtGui.QWidget):
    def __init__(self):
        super().__init__()
        layout = QtGui.QVBoxLayout(self)
        button1 = QtGui.QPushButton('app.quit')
        button1.clicked.connect(app.quit)
        layout.addWidget(button1)
        button2 = QtGui.QPushButton('sys.exit')
        button2.clicked.connect(sys.exit)
        layout.addWidget(button2)

app = QtGui.QApplication([])

window = MyWindow()
window.show()

app.exec_()

这两种方法都可以。

我在 Windows 7 上的 Python 3.3 上使用 PySide 1.2.2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多