Ich arbeite in einem Projekt, das einen Graphen dynamisch zeichnen muss, wie die Eingaben in einer Tkinter Spinbox geändert wird.Plot Graph mit Pyplot mit Eingabe von Tkinter Spinbox
Ich habe einen Beispielcode:
from tkinter import *
from tkinter import font
from tkinter.font import Font
from tkinter import messagebox
print("'Tkinter' module is found as tkinter.")
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
print("Importing matplotlib from libraries.")
master = Tk()
def ok(x_val=1000,y_val=20):
fig = Figure(figsize=(5,5),dpi=70)
ax = fig.subplots()
ax.set_title("Right Ear")
ax.set_ylabel("db HL")
ax.set_xlabel("Frequency")
ax.set_xlim(100,9000)
ax.set_ylim(130,-10)
ax.set_facecolor("#ffd2d2")
x = [125,250,500,1000,2000,4000,8000]
ticks = [125,250,500,"1K","2K","4K","8K"]
xm = [750,1500,3000,6000]
ax.set_xscale('log', basex=2)
ax.set_xticks(x)
ax.set_xticks(xm, minor=True)
ax.set_xticklabels(ticks)
ax.set_xticklabels([""]*len(xm), minor=True)
ax.yaxis.set_ticks([120,110,100,90,80,70,60,50,40,30,20,10,0,-10])
ax.plot([x_val],[y_val],'r+',markersize=15.0,mew=2)
ax.grid(color="grey")
ax.grid(axis="x", which='minor',color="grey", linestyle="--")
canvas = FigureCanvasTkAgg(fig, master=master)
canvas.show()
canvas.get_tk_widget().grid(column=0,row=2,columnspan=3,rowspan=15)
def action():
print(spin.get())
canvas.draw()
ok(spin.get(),10)
spin = Spinbox(master, from_=125,to=8000,command=action)
spin.grid(column=5,row=2)
ok()
Dieser Code nicht den Plot ändern, kann ich nicht verstehen, wie es zu ändern, um genau zu sein, wie canvas.draw()
hier zu nutzen, um die Arbeit zu tun. Die Spinbox hat einen Wertebereich von 125 bis 8000. Ich konnte nicht herausfinden, wie man den Spinbox-Wert jedes Mal ändert (kann command=
verwenden, aber implementieren) und ihn der x-Achse von ax.plot()
zuführen und dynamisch plotten. Wenn sich der Wert von "spinbox" ändert, ändert sich auch der Plot in die neue Position und entfernt den vorherigen Plot von der vorherigen Position.
Ich fragte eine andere Frage basierend auf @ImportanceOfBeingErnest Ihre Antwort. [hier] (https://stackoverflow.com/questions/47843511/plotting-lines-with-pyclot-when-button-clicked-with-values-from-tkinter-spinbox?noredirect=1&lq=1) –