Pyside 应用程序未正确关闭

问题描述 投票:0回答:2

我最近开始在 PySide 中进行 GUI 编程,但我遇到了有关退出命令的奇怪问题。

Sys.exit([x])
似乎被广泛用于停止 PySide 程序;但是,每当我在使用类的 PySide 程序中使用它时,它不会向 PyCharm 返回退出代码或停止任务管理器中的 Python 进程。

奇怪的是,使用 PySide 时似乎很难做到这两件事;我可以跳出主循环,调用

sys.exit(0)
raise SystemExit(0)
,它不会停止在后台运行。这发生在使用PySide时,并且发生在使用类构造小部件时。

我尝试了各种组合,但我可以可靠地终止进程的唯一方法是使用

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
2个回答
0
投票

我没有看到这种行为。这意味着我可以使用

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。


0
投票

对于其他进入这个兔子洞的人来说,从环境中完全删除 Anaconda(在我的例子中是 miniconda3)解决了我的退出挂起问题。

我假设我在使用 conda 时搞砸了。

© www.soinside.com 2019 - 2024. All rights reserved.