如何阻止 Spyder 清除变量而不是执行我的 PyQt 脚本?
How do I stop Spyder from clearing variables instead of executing my PyQt script?
当我在 Spyder 中执行我的 PyQt 脚本时,它似乎除了清除变量之外没有做任何事情。当我再次执行它时,它按预期工作。
正如您在下面看到的,我无法进一步减少代码,但问题仍然存在。
这是预期的行为吗?我做错了什么?
import sys
from PyQt5 import QtWidgets
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
window.show()
app.exec_()
详细:
- 我打开 Spyder。
- 我执行脚本。 window 打开,我通过关闭 window (预期行为)终止。
- 我执行脚本。几秒后,控制台returns。除了变量消失(意外行为)之外,似乎什么都没发生。
- 从 2 开始重复...
问题不在于变量被清除,而是 PyQt 应用程序不能在 Spyder 中重复 运行。这是 Spyder Wiki 中解决的一个常见问题:How to run PyQt applications within Spyder.
这似乎与 Spyder 本身就是一个 Qt 应用程序这一事实有关。具体来说,Wiki 条目对此进行了解释:
The most common problem when running a PyQt application multiple times inside Spyder is that a QApplication instance remains in the namespace of the IPython console kernel after the first run. In other words, when you try to re-run your application, you already have a QApplication instance initialized.
work-around 是为了确保 QApplication
实例在脚本退出时超出范围,即在函数范围内创建它。使用上面的简单示例,归结为:
import sys
from PyQt5 import QtWidgets
def main():
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
window.show()
app.exec_()
main()
当我在 Spyder 中执行我的 PyQt 脚本时,它似乎除了清除变量之外没有做任何事情。当我再次执行它时,它按预期工作。
正如您在下面看到的,我无法进一步减少代码,但问题仍然存在。 这是预期的行为吗?我做错了什么?
import sys
from PyQt5 import QtWidgets
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
window.show()
app.exec_()
详细:
- 我打开 Spyder。
- 我执行脚本。 window 打开,我通过关闭 window (预期行为)终止。
- 我执行脚本。几秒后,控制台returns。除了变量消失(意外行为)之外,似乎什么都没发生。
- 从 2 开始重复...
问题不在于变量被清除,而是 PyQt 应用程序不能在 Spyder 中重复 运行。这是 Spyder Wiki 中解决的一个常见问题:How to run PyQt applications within Spyder.
这似乎与 Spyder 本身就是一个 Qt 应用程序这一事实有关。具体来说,Wiki 条目对此进行了解释:
The most common problem when running a PyQt application multiple times inside Spyder is that a QApplication instance remains in the namespace of the IPython console kernel after the first run. In other words, when you try to re-run your application, you already have a QApplication instance initialized.
work-around 是为了确保 QApplication
实例在脚本退出时超出范围,即在函数范围内创建它。使用上面的简单示例,归结为:
import sys
from PyQt5 import QtWidgets
def main():
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
window.show()
app.exec_()
main()