# interface_eia232_I18_term.py
#
from tkinter import *    # Python 2.7 "from Tkinter import *"
from tkinter import ttk  # Python 2.7 "import ttk"

#from Tkinter import *
#import ttk
import serial

port = '/dev/ttyUSB0'
speed = 115200

ser = serial.Serial(port,speed, timeout=0.1)
ser.flushInput()  # flush buffers
ser.flushOutput()

def send(*args):
   ser.write(sertextsend.get().encode())
   
def receive():
   if (ser.inWaiting() != 0):
       sertextrec.set(ser.read(30).decode())
   mainWin.after(10,receive)

mainWin = Tk()
mainWin.title('TkTerm V 1.0')
mainWin.columnconfigure(0, weight=1)         # numbering beginns with 0 for old Tk widgets 
mainWin.rowconfigure(0, weight=1)            

mainFrame = ttk.Frame(mainWin, borderwidth=10, relief='ridge', padding="10 10 20 20")
mainFrame.grid(column=0, row=0, sticky=(W, N, E, S))
mainFrame.columnconfigure(1, weight=5)       # numbering beginns with 1 for newer Ttk widgets 
mainFrame.columnconfigure(2, weight=5)
mainFrame.rowconfigure(1, weight=1)
mainFrame.rowconfigure(2, weight=1)
mainFrame.rowconfigure(3, weight=1)
mainFrame.rowconfigure(4, weight=1)
mainFrame.rowconfigure(5, weight=1)

sertextsend = StringVar()
sertextrec = StringVar()

entry_1 = ttk.Entry(mainFrame, textvariable=sertextsend)
entry_1.grid(column=2, row=3, sticky=(W, N, E))
entry_1.focus()

label_1 = ttk.Label(mainFrame, text="port: "+port)
label_1.grid(column=1, row=1, sticky=(E,N))
label_2 = ttk.Label(mainFrame, text='  speed: '+str(speed))
label_2.grid(column=2, row=1, sticky=(W,N))
label_3 = ttk.Label(mainFrame, text='text to send: ')
label_3.grid(column=1, row=3, sticky=(E, N))
label_4 = ttk.Label(mainFrame, text='received text: ')
label_4.grid(column=1, row=2, sticky=(N, E))
label_5 = ttk.Label(mainFrame, textvariable=sertextrec)
label_5.grid(column=2, row=2, sticky=(W, N, E))

butt_1 = ttk.Button(mainFrame, text='send', command = send)
butt_1.grid(column=2, row=4, sticky=(W, E))

# Padding
for child in mainFrame.winfo_children():
    child.grid_configure(padx=10, pady=10)

mainWin.bind('<Return>',send)
    
mainWin.after(10,receive)
mainWin.mainloop()
