[gui_base.py]
import serial import time import tkinter ser = serial.Serial('COM6',115200,timeout=0.1) lo_tg = [1,2,4] tgpslist=[0000]*len(lo_tg) ser.close() def btn_lock(): global tgpslist global lo_tg global txt_lc global txt_lp ser.open() kazoe=0 for i in lo_tg: if txt_lc.get()==str(i): tgn=kazoe kazoe+=1 if len(str(txt_lp.get()))==3: tgpslist[tgn]=txt_lp.get() print(txt_lp.get()) #lock moji="L00"+str(txt_lc.get())+"\n" print(moji) ser.write(moji.encode('utf-8')) time.sleep(0.1) txt_lc.delete(0, tkinter.END) txt_lp.delete(0, tkinter.END) ser.close() def btn_open(): global tgpslist global lo_tg global txt_oc global txt_op ser.open() kazoe=0 for i in lo_tg: if txt_oc.get()==str(i): tgn=kazoe kazoe+=1 if txt_op.get()==tgpslist[tgn]: tgpslist[tgn]=0000 print(txt_op.get()) #open moji="U00"+str(txt_oc.get())+"\n" print(moji) ser.write(moji.encode('utf-8')) time.sleep(0.1) txt_oc.delete(0, tkinter.END) txt_op.delete(0, tkinter.END) ser.close() #make tki = tkinter.Tk() tki.geometry('500x200') tki.title('GUIopen,lock') #lock_label lol_t = tkinter.Label(text='クリップのロック') lol_t.place(x=90, y=20) lol_c = tkinter.Label(text='ロックするクリップ') lol_c.place(x=30, y=50) lol_p = tkinter.Label(text='設定するパスワード') lol_p.place(x=30, y=80) #open_label opl_t = tkinter.Label(text='クリップのオープン') opl_t.place(x=320, y=20) opl_c = tkinter.Label(text='オープンするクリップ') opl_c.place(x=260, y=50) opl_p = tkinter.Label(text='設定したパスワード') opl_p.place(x=260, y=80) #lock_txt txt_lc = tkinter.Entry(width=20) txt_lc.place(x=125, y=50) txt_lp = tkinter.Entry(width=20) txt_lp.place(x=125, y=80) #open_txt txt_oc = tkinter.Entry(width=20) txt_oc.place(x=355, y=50) txt_op = tkinter.Entry(width=20) txt_op.place(x=355, y=80) #lock_buttan btn_l = tkinter.Button(tki, text='ロック', command=btn_lock) btn_l.place(x=90, y=110) #open_buttan btn_o = tkinter.Button(tki, text='オープン', command=btn_open) btn_o.place(x=320, y=110) time.sleep(0.1) tki.mainloop()
デモ動画はこちらです。↓
以下解説
シリアル通信のため、相手の設定に合わせる
ser = serial.Serial('COM6',115200,timeout=0.1)
今回送るコマンドは改行を挟む必要があるので送る文字列には\nを付ける
moji="L00"+str(txt_lc.get())+"\n" ser.write(moji.encode('utf-8'))
こまめにシリアルをオープン、クローズすることでコマンドが重なっていくのを防ぐ
ser.open() ser.close()
テキストボックスを空白にするのは.delete(開始位置,終了位置)
txt_lc.delete(0, tkinter.END) txt_lp.delete(0, tkinter.END) txt_oc.delete(0, tkinter.END) txt_op.delete(0, tkinter.END)