[Matplotlib-users] Fwd: Embedding, Drawing, Curser in Tkinter
Thomas Caswell
tcaswell at gmail.com
Mon Aug 7 12:24:42 EDT 2017
Forward of response.
@Stefan Please respond to the mailing list (you will need to join to post
un-moderated https://mail.python.org/mailman/listinfo/matplotlib-users )
Tom
---------- Forwarded message ---------
From: Stefan Schubert <stefanschubi at googlemail.com>
Date: Mon, Aug 7, 2017 at 7:02 AM
Subject: Re: [Matplotlib-users] Embedding, Drawing, Curser in Tkinter
To: Thomas Caswell <tcaswell at gmail.com>
Hi Thomas,
thank you for answerring. I have already developed further. Here is my
current code.
def PlotFrame(self):
self.fig = Figure (figsize=(5,4), dpi=100)
self.ax = self.fig.add_subplot(111)
self.ax = self.fig.add_subplot(111) #fuer 2d-Plot
self.ax.set_title('Definition der LRUGL')
self.ax.set_xlabel('Fahrzeugbreite y [mm]')
self.ax.set_ylabel('Fahrzeughoehe z [mm]')
self.ax.axis([-2000,2000,0, 5000])
self.ax.grid(True)
self.canvas = FigureCanvasTkAgg(self.fig,self)
self.toolbar = NavigationToolbar2TkAgg(self.canvas,self)
self.toolbar.update()
self.plot_widget = self.canvas.get_tk_widget()
self.plot_widget.pack(side=tk.TOP, fill=tk.BOTH, expand=1)
self.toolbar.pack(side=tk.BOTTOM, fill=tk.BOTH, expand=1)
self.ax.plot(np.zeros(100))
def onMouseMove(event):
self.ax.lines = [self.ax.lines[0]]
if event.xdata and event.ydata: # python3 often has None
self.ax.axhline(y=event.ydata, color="k") #(y=event.ydata,
color="k")
self.ax.axvline(x=event.xdata, color="k") #(x=event.xdata,
color="k")
self.canvas.show()
self.canvas.mpl_connect('motion_notify_event', onMouseMove)
self.canvas.show()
def fig_ax_request():
publish('FIG,AX',self.fig,self.ax)
subscribe('REQUEST_FIG,AX',fig_ax_request)
def DrawPlot(self):
def test_plot():
self.ax.imshow(np.random.normal(0.,1.,size=[1000,1000]),cmap="hot",aspect="auto")
self.fig.canvas.draw()
self.buttonAAA['command'] = test_plot
def get_fig_ax(fig,ax):
self.fig = fig
self.ax = ax
subscribe('FIG,AX',get_fig_ax)
publish('REQUEST_FIG,AX')
Now i have a table for input and an embedded diagram in tkinter canvas.
This code above is only for testing. I want the functionality that i can
write values in the table and let it simultanously paint into
matplot-Canvas. Hav eyou some suggestion or imrpovements to do that ?
Best regards from Stefan
On 6 August 2017 at 01:58, Thomas Caswell <tcaswell at gmail.com> wrote:
> Stefan,
>
> On a quick skim that does not look wrong.
>
> I would not use globals and have the callbacks be methods on
> your BOStrab_Fahrzeugeinschraenkung class.
>
> Tom
>
> On Sat, Aug 5, 2017 at 12:35 PM stefanxfg via Matplotlib-users <
> matplotlib-users at python.org> wrote:
>
>> Hello to everyone.
>>
>> I develop a GUI and i want to embedd Matplotlib in a Tkinter Canvas.
>> Theres
>> is no problem until here. But i want to draw the lines and have a curser
>> line in the diagram. In the code below i embedd the canvas in the
>> INIT-Function.
>>
>>
>>
>> class BOStrab_Fahrzeugeinschraenkung:
>> def __init__(self, top=None):
>> ......
>> self.ya = np.array(ddd)
>> self.yb = np.array(ddd)
>> self.z = np.array(ddd)
>>
>> self.canvasframe11 = Frame(self.TPanedwindow4_f2)
>> self.canvasframe11.place(x=0, y=0, relwidth=1.0,
>> relheight=0.95,
>> bordermode=INSIDE)
>> self.canvasframe12 = Frame(self.TPanedwindow4_f2)
>> self.canvasframe12.place(x=0, rely=0.95, relwidth=1.0,
>> bordermode=INSIDE)
>>
>> global ax1
>> self.fig1 = Figure (figsize=(5,4), dpi=100)
>>
>> self.ax1 = self.fig1.add_subplot(111) #für 2d-Plot
>> self.ax1.set_title('Definition der LRUGL')
>> self.ax1.set_xlabel('Breite y [mm]')
>> self.ax1.set_ylabel('Hoehe z [mm]')
>>
>> self.ax1.axis([-2000,2000,0, 5000])
>> self.ax1.grid(True)
>> self.ax1.plot(self.ya,self.z, color='red',
>> linestyle='--', marker='')
>> self.ax1.plot(self.yb,self.z, color='red',
>> linestyle='--', marker='')
>>
>> self.canvas1 =
>> FigureCanvasTkAgg(self.fig1,self.canvasframe11)
>> toolbar1 = NavigationToolbar2TkAgg(self.canvas1,
>> self.canvasframe12)
>>
>> self.canvas1.get_tk_widget().pack(fill=BOTH, expand=TRUE,
>> pady=2, padx=2,
>> anchor="n")
>>
>>
>>
>> In several examples i saw the drawing in def's and the input for the
>> drawing
>> from root. So the following code is function then.
>>
>>
>> def onMouseMove(event):
>> ax1.lines = [ax1.lines[0]]
>> ax1.axhline(y=event.ydata, color="k")
>> ax1.axvline(x=event.xdata, color="k")
>>
>> def updateData():
>> global level1, val1
>> clamp = lambda n, minn, maxn: max(min(maxn, n), minn)
>> yield 1 # FuncAnimation expects an iterator
>>
>> def visualize(i):
>> lineVal1.set_ydata(val1)
>> return lineVal1
>>
>>
>> My question is. Is my way to embedd the code in Tkinter right? Or its
>> better
>> to declare the diagram functionalities outside the class and only draw
>> into
>> the class?
>>
>> Best regards from Stefan
>>
>>
>>
>> --
>> View this message in context:
>> http://matplotlib.1069221.n5.nabble.com/Embedding-Drawing-Curser-in-Tkinter-tp48038.html
>> Sent from the matplotlib - users mailing list archive at Nabble.com.
>> _______________________________________________
>> Matplotlib-users mailing list
>> Matplotlib-users at python.org
>> https://mail.python.org/mailman/listinfo/matplotlib-users
>>
>
--
Mit freundlichen Grüßen
Schubert
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20170807/eed91e15/attachment-0001.html>
More information about the Matplotlib-users
mailing list