Mi sono chiesto su questo e ha voluto fare qualcosa di simile. Questo è quello che ho trovato. In primo luogo, volevo sapere che le coordinate del mouse sono. Per essere in grado di leggere le coordinate, ho inserito la seguente dichiarazione "alert", simile a "stampa", in drag_points.py:
var startx = 0;
var starty = 0;
function dragstarted(d) {
d3.event.sourceEvent.stopPropagation();
d3.select(this).classed("dragging", true);
startx = obj.ax.x(d[0]);
starty = obj.ax.y(d[1]);
}
var endx = 0;
var endy = 0;
function dragended(d) {
d3.select(this).classed("dragging", false);
endx = obj.ax.x(d[0]);
endy = obj.ax.y(d[1]);
alert(endx-startx);
d3.select("input")
.attr("value",endx-startx)
}
Su clic del mouse e rilasciarlo, si apre un avviso diag con l'X- distanza percorsa. Ciò consente l'accesso alle informazioni sulle coordinate.
Successivamente, ho verificato se sono in grado di codificare dinamicamente queste informazioni sulle coordinate nell'html sottostante, consentendo in tal modo un'ulteriore elaborazione di backend. Ho imparato che d3.js ti consente di modificare il contenuto di un tag html. . Ho quindi modificato i "modelli" di Jinja _display.py (che si trova nella stessa directory di "plugins.py" Nello specifico, ho inserito il seguente nel modello:
<table width=300 height=200 border=5>
<tr>
<form method="POST" action="/plot" class="">
<input type="submit" name="submit" value="PLOT">
</form>
</tr>
</table>
e modificato il "drag_points.py" in modo che invece di aprire una finestra di avviso, è modificato il valore del valore di "ingresso" da "post" per EndX-startx. Cioè,
d3.select("input")
.attr("value",endx-startx)
il risultato finale è stato, quando una palla viene trascinato e rilasciato , la casella di avviso visualizza lo spostamento x e questo valore viene utilizzato per aggiornare il valore del pulsante "input". Se si utilizza un altro tag oltre al pulsante di input per impostare il valore, dovrebbe essere possibile tendere le informazioni a valle.
potresti spiegare come spostare leggere il valore generato dall'avviso sull'input python? Penso che questo sia quello che stavi spiegando nell'ultimo bit del codice fornito, ma mi manca qualcosa ... – Docuemada
Mi dispiace se questo non era chiaro. Per ricapitolare ciò che ho fatto: 1. mostra il grafico mpld3 in un html contenente un tag (ad esempio un tag nell'esempio precedente, che a proposito può essere nascosto usando font-style = "display: none"); 2. spostare i punti all'interno della figura; 3. all'interno del javascript, le coordinate vengono lette e quindi utilizzate per aggiornare il valore del tag usando d3.js; e 4. infine, quando si preme il pulsante "invia", le informazioni vengono inviate al server in cui le informazioni sulle coordinate vengono decodificate utilizzando lo script python. Spero che aiuti. – sjp14051