In a previous post I showed similar GUI using place,pack . Now will show similar sample GUI (Graphical User Interface) using Python 3 and Tkinter with Grid,row,col method
Widgets used
- Window
- Frame
- Labels
- Buttons
- Canvas
- Circle
- Frame
- Text
- ScrollBar
Design layout

Restart pressed (clears text and indicators – show that is was restarted

pressing of component,Optical and RF test (RF test intentional fail in this simulation)

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 1 16:20:52 2019
@author: aleja
helpful references
https://stackoverflow.com/questions/34276663/tkinter-gui-layout-using-frames-and-grid
https://stackoverflow.com/questions/4310489/how-do-i-remove-the-light-grey-border-around-my-canvas-widget
"""
from tkinter import *
maxLenText=0
#your custom function(s) for when buttons pressed - run test and report
def printtext(strtext):
if strtext=="Comp Test":
#run Comp Test()
TestResult="Pass"
if TestResult.find("Fail")>=0:
canv1.itemconfig(c1, fill='red')
else:
canv1.itemconfig(c1, fill='lightgreen')
elif strtext=="Optical Test":
#run Optical Test()
TestResult="Pass"
if TestResult.find("Fail")>=0:
canv2.itemconfig(c2, fill='red')
else:
canv2.itemconfig(c2, fill='lightgreen')
elif strtext=="RF Test":
#run RF Test Test()
TestResult="Failed- BER subTest"
if (TestResult.find("Fail")>=0):
canv3.itemconfig(c3, fill='red')
else:
canv3.itemconfig(c3, fill='lightgreen')
elif strtext=="Restart":
#run RF Test Test()
TestResult="Cleared Indicator and Text"
canv1.itemconfig(c1, fill='black')
canv2.itemconfig(c2, fill='black')
canv3.itemconfig(c3, fill='black')
txt1.delete(1.0,END)
else:
TestResult="UNKNOWN TEST contact Engineering"
print("button press",strtext)
global maxLenText
txt1.insert(INSERT,(strtext+":"+TestResult+"\n"))
txt1.yview(END)
#GUI setup below
myWindow=Tk()
myWindow.title("myWindow")
myWindow.minsize(380,250)
maxLenText=0
# do this or frame in window will not follow window (expanding)
myWindow.grid_rowconfigure(1,weight=1) #need on row define as 1 for expanding row wise bottomframe
myWindow.grid_columnconfigure(0,weight=1)
frame1=Frame(myWindow,width=50,height=50,bg='lightblue')
frame1.grid(row=0, column=0, sticky='NWES', padx=10, pady=10, columnspan=4)
frame1.rowconfigure(0,weight=1)
frame1.columnconfigure(3,weight=1) #the lastcol goes along with rigth side expanding
L1=Label(frame1, text="Transceiver Test")
L2=Label(frame1, text="YourCompanyName")
L1.grid(row=0, column=0, padx=0, pady=10, columnspan=3) #span 2 so it does not affect component button
L2.grid(row=0, column=3, padx=10, sticky='E') #Keep company label attached to east(right) side
b1=Button(frame1, text='Component Test', command=lambda:printtext("Comp Test"))
b2=Button(frame1, text='Optical Test', command=lambda:printtext("Optical Test"))
b3=Button(frame1, text='RF Test', command=lambda:printtext("RF Test"))
b4=Button(frame1, text='Restart', padx=3, command=lambda:printtext("Restart"))
b1.grid(row=1, column=0,padx=(10,0))
b2.grid(row=1, column=1)
b3.grid(row=1, column=2)
b4.grid(row=1, column=3,padx=10,sticky='E') #keep Reset button on Right side
canv1=Canvas(frame1,width=50, height=30, bg='lightblue', bd=0, highlightthickness=0)
canv2=Canvas(frame1,width=50, height=30, bg='lightblue', bd=0, highlightthickness=0)
canv3=Canvas(frame1,width=50, height=30, bg='lightblue', bd=0, highlightthickness=0)
canv1.grid(row=2, column=0, padx=(10,0), columnspan=1) #padding to match first button
canv2.grid(row=2, column=1, columnspan=1)
canv3.grid(row=2, column=2, columnspan=1)
#========indicator=========
LTRY=5 #light top right Y
LTRX=15 #light top right X
dia=20
c1=canv1.create_oval(LTRX,LTRY,LTRX+dia,LTRY+dia,fill='black')
c2=canv2.create_oval(LTRX,LTRY,LTRX+dia,LTRY+dia, fill='black')
c3=canv3.create_oval(LTRX,LTRY,LTRX+dia,LTRY+dia, fill='black')
#=====bottom frame now the frame will be two col width with txt and scrollbar
frame2=Frame(myWindow,width=200,height=100,bg='lightblue',padx=10,pady=10)
frame2.grid(row=1,column=0,sticky='NWES',columnspan=2)
frame2.rowconfigure(0,weight=1)
frame2.columnconfigure(0,weight=1)
txt1=Text(frame2,width=20,height=10)
txt1.grid(row=0,column=0,sticky='NWES')
#attach a Scrollbar to txt1
vscroll=Scrollbar(frame2,orient=VERTICAL,command=txt1.yview)
txt1['yscroll']=vscroll.set
vscroll.grid(row=0,column=1,sticky='NS')
myWindow.mainloop()<span id="mce_SELREST_start" style="overflow:hidden;line-height:0;"></span>
helpful references
https://stackoverflow.com/questions/34276663/tkinter-gui-layout-using-frames-and-grid
https://stackoverflow.com/questions/4310489/how-do-i-remove-the-light-grey-border-around-my-canvas-widget
This post is not connected or endorsed by any company.
Created to spark ideas on the subject.
Use at your own risk.