2014-04-06 3 views
7

Ich versuche, ein Python-Programm zu schreiben, das eine Zahl für unbestimmte Zeit anzeigt und es schließt, nachdem eine beliebige Tastaturtaste gedrückt wurde.Wie schließe ich eine Pythonfigur durch Tastatureingabe?

In der Tat soll das Python-Programm das gleiche tun wie dieser Matlab-Code:

t = 0:0.01:2; 
s = sin(2 * pi * t); 

plot(t,s) 

pause 
close 

In Python Ich bin in der Lage, die Figur zu zeichnen, aber nichts passiert nach der Tastatureingabe.

import numpy as np 
import matplotlib.pyplot as plt 

t = np.arange(0.0, 2.0, 0.01) 
s = np.sin(2*np.pi*t) 

#plt.ion() 
fig = plt.figure() 
plt.plot(t,s) 
#plt.show() 
plt.draw() 

raw_input("PRESS ANY KEY TO CONTINUE.") 
plt.close(fig) 

Bisher beobachtete ich, dass plt.close(fig) nichts mit plt.show() in Verbindung macht. Wenn ich jedoch stattdessen plt.draw() verwende, schließt plt.close(fig) die Zahl. Wenn ich jedoch raw_input("PRESS ANY KEY TO CONTINUE.") in mein Programm einfüge, erscheint die Figur überhaupt nicht.

Was mache ich falsch?

Ich habe auch versucht, mit plt.ion() zu experimentieren, aber ohne Erfolg.

Antwort

4

so etwas vielleicht?

import numpy as np 
import matplotlib.pyplot as plt 

t = np.arange(0.0, 2.0, 0.01) 
s = np.sin(2*np.pi*t) 


fig = plt.figure() 
plt.plot(t,s) 
#plt.show() 
plt.draw() 
plt.pause(1) # <------- 
raw_input("<Hit Enter To Close>") 
plt.close(fig) 
+0

Danke, es funktioniert ... –

+1

@BorisL. dann erwäge bitte, Jorans Lösung als "die Antwort" zu markieren. –

+0

@JoranBeasley, das Plot-Fenster erscheint im Hintergrund. Ich muss meine Maus benutzen, um zu klicken und die Handlung anzusehen. Kann die Handlung nicht nach vorne kommen und nur durch Drücken von 'Enter' oder 'q' kann ich sie schließen (wie wir es für gnuplot tun)? – hbaromega

3

Ich denke, dass plt.waitforbuttonpress(0) mit dem Trick raw_input() der Verwendung lösen könnte:

import numpy as np 
import matplotlib.pyplot as plt 

t = np.arange(0.0, 2.0, 0.01) 
s = np.sin(2*np.pi*t) 

fig = plt.figure() 
plt.plot(t,s) 
plt.draw() 
plt.waitforbuttonpress(0) # this will wait for indefinite time 
plt.close(fig)