<p>这可以通过</p>
<ol>
<li>创建跟踪窗口的全局列表</li>
<li>子类化<code>pg.GraphicsWindow</code>或{<cd2>}(假设您<code>import pyqtgraph as pg</code>)</li>
<li>将新创建的子类窗口/小部件实例添加到全局跟踪列表</li>
<li>重写<code>closeEvent</code>以便在窗口关闭时从跟踪器中删除窗口。在</li>
</ol>
<p>这是因为<a href="https://stackoverflow.com/a/2029528/6605826">the way python caches imported modules</a>,所以再次导入{<cd5>}应该访问同一个变量。在</p>
<p>例如:make<code>tracking.py</code>:</p>
<pre><code>import warnings
class WTracker:
def __init__(self):
self.open_windows = []
def window_closed(self, win):
if win in self.open_windows:
self.open_windows.remove(win)
else:
warnings.warn(' tracker received notification of closing of untracked window!')
def window_opened(self, win):
self.open_windows += [win]
tracker = WTracker()
</code></pre>
<p>然后<code>figure.py</code>:</p>
^{pr2}$
<p>最后,我们可以实现<code>gcf()</code>;让我们把它放在<code>pyplot.py</code>中:</p>
<pre><code>from tracking import tracker
from figure import Figure
def gcf():
if len(tracker.open_windows):
return tracker.open_windows[-1]
else:
return Figure()
</code></pre>
<p>然后用<code>tester.py</code>进行测试:</p>
<pre><code>import sys
from PyQt4 import QtGui
from figure import Figure
from pyplot import gcf
app = QtGui.QApplication(sys.argv)
fig1 = gcf()
fig2 = gcf()
fig3 = Figure()
fig4 = gcf()
fig4.close()
fig5 = gcf()
print('fig2 is fig1 = {}'.format(fig2 is fig1))
print('fig3 is fig1 = {}'.format(fig3 is fig1))
print('fig4 is fig3 = {}'.format(fig4 is fig3))
print('fig5 is fig3 = {}'.format(fig5 is fig3))
print('fig5 is fig1 = {}'.format(fig5 is fig1))
</code></pre>
<p>结果是:</p>
<pre><code>$ python tester.py
fig2 is fig1 = True
fig3 is fig1 = False
fig4 is fig3 = True
fig5 is fig3 = False
fig5 is fig1 = True
</code></pre>
<p>子类化<code>pg.PlotWidget</code>而不是<code>pg.GraphicsWindow</code>起作用,但随后必须创建一个布局,将其设置为中心项,然后运行<code>self.show()</code>。在</p>