PyQtGraph打开后立即关闭

10

我正在运行一些基本代码,这些代码来自文档

import pyqtgraph as pg
import numpy as np
x = np.arange(1000)
y = np.random.normal(size=(3, 1000))
plotWidget = pg.plot(title="Three plot curves")
for i in range(3):
    plotWidget.plot(x, y[i], pen=(i,3))

但出现了某种原因,窗口打开然后立即关闭,我只看到了一闪而过的画面。是否有一种函数可以让窗口保持打开状态?

3个回答

5

在脚本的开头创建一个QApplication,然后在脚本结尾调用其exec_()方法,就可以保持窗口打开,如下所示:

import pyqtgraph as pg
import numpy as np
import sys
from PyQt4 import QtGui

app = QtGui.QApplication(sys.argv)  # Create QApplication ***

x = np.arange(1000)
y = np.random.normal(size=(3, 1000))
plotWidget = pg.plot(title="Three plot curves")
for i in range(3):
    plotWidget.plot(x, y[i], pen=(i, 3))

# Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        app.exec_()  # Start QApplication event loop ***

我在关键行上放置了 ***。


除了使用 input() 选项(需要将 stdin 连接到终端),如果您没有访问 app 对象或其他已构建的对象,则可以使用 QApplication.instance() 来获取它 - user202729

3
问题是Python进程在最后一次for循环迭代后结束,从而终止小部件。您可以使用-i开关在执行脚本后进入交互式Python解释器,该解释器保留在执行脚本期间实例化的所有对象:
python -i /path/to/script.py

可以承认,这是一种权宜之计,pyqtgraph可能有一种“本地”的方法来实现这一点(例如 matplotlib.pyplot 中的 show 函数默认情况下就是这样做的),但我无法找到一个类似于 pyqtgraph 的函数。


即使脚本没有循环,例如“import pyqtgraph as pg pg.plot(data)”,它仍会立即打开和关闭。 - Definity
当脚本执行到结尾时,相应的进程终止(以及所有已实例化的小部件)。这对于任何Python脚本都是正确的。提到我刚才提到的for循环,通过使用-i开关,您可以防止进程终止,而是将其切换到交互模式。这是一种“Python方式”,也许还有一种“pyqtgraph方式”,但是,正如我所提到的,我没有找到。 - a_guest

0
进一步回答a_guest的问题 - 要在Pycharm中查看图形,请转到:运行 -> 编辑配置 -> 解释器选项。保留-i。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接