Sep-27-2020, 07:47 AM
I just created a tkinter app that diplays numbers separated with semicolons as graphs. The numbers for x and y are inserted in two textboxes and then plotted. The plots can also be refreshed. I use subplots but when I start the tkinter app, It also opens the subplots without the menu in a separate window. I only want the main window with the buttons and textfields to be displayed.
Here is my code
Here is my code
import matplotlib
matplotlib.use('TkAgg')
import tkinter as tk
from tkinter import *
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg,
NavigationToolbar2Tk)
class Plotwindow():
def __init__(self, masterframe, size):
(w,h)=size
inchsize=(w/25.4, h/25.4)
#self.figure = Figure(inchsize)
#self.ax1 = self.figure.add_subplot(111)
#self.ax2 = self.figure.add_subplot(221)
self.figure, (self.ax1, self.ax2) = plt.subplots(1, 2)
# create canvas as matplotlib drawing area
self.canvas = FigureCanvasTkAgg(self.figure, master=masterframe)
self.canvas.get_tk_widget().pack()
toolbar = NavigationToolbar2Tk(self.canvas, masterframe)
toolbar.update()
# placing the toolbar on the Tkinter window
self.canvas.get_tk_widget().pack()
def plotxy(self, x, y):
self.ax1.plot(x,y)
self.ax2.scatter(x,y)
#self.axes.plot(x,y)
self.canvas.draw()
def clearplot(self):
self.ax1.cla()
self.ax2.cla()
self.canvas.draw()
# class Generatetestdata():
# def __init__(self):
# self.index=0 # index of function call
# self.xmin=0.0
# 4
# self.xmax=10.0
# self.nbvalues=500
# def getxy(self):
# n=self.index
# x=np.linspace(self.xmin, self.xmax, self.nbvalues)
# y=np.sin(4*x)*np.exp(-n*x/10)
# self.index+=1
# #self.xmax+=5.0
# return x,y
class getnumbersfromtextbox():
def getTextInput(self):
result=textExample.get("1.0","end")
return(list(map(float,result.split(";"))))
def getTextInput2(self):
result=textExample2.get("1.0","end")
return(list(map(float,result.split(";"))))
def plotdata():
x=dattext.getTextInput()
y=dattext.getTextInput2()
# x,y=datgen.getxy()
pw.plotxy(x,y)
def clear():
pw.clearplot()
if __name__ == "__main__":
#datgen = Generatetestdata()
dattext = getnumbersfromtextbox()
root = tk.Tk()
mf= tk.Frame()
pw=Plotwindow(mf,(200,150))
mf.pack()
bf=tk.Frame()
b1=tk.Button(bf,text="Plot", command=plotdata)
b1.pack(side=tk.LEFT)
b2=tk.Button(bf,text="Clear", command=clear)
b2.pack(side=tk.LEFT)
bf.pack()
textExample=tk.Text(mf, height=2)
textExample.pack()
textExample2=tk.Text(mf, height=2)
textExample2.pack()
root.mainloop()
