Having a GUI in the terminal would be ”interesting”. Here is some code to display a box with a title and content. Its far from a GUI, but its a start. This idea might just be used in my autonomous buoy project for displaying telemetry data.
from colorama import Fore, Back, Style
def gen_text_box(title, size_x, size_y, content):
"""
Arguments:
title - Title string of box displayed at the top
size_x - Horizontal character size of the box
size_y - Vertical character size of the box
content - String of content that needs to be displayed in the box
Returns:
line - string with box embedded, ready to be printed
"""
BLANK_ROWS = 1
BLANK_COL = 2
t_start = int(size_x/2 - len(title)/2)
t_stop = t_start + len(title)
line = "" # Initialise drawing string to nothing
# Draw top line
for i in range(size_x):
if i == 0:
line = line + "\u250C"
elif i == size_x - 1:
line = line + "\u2510"
else:
line = line + "\u2500"
# Insert title
start = line[0:t_start]
end = line[t_stop:]
line = Fore.CYAN+start+Fore.WHITE+title+Fore.CYAN+end # Make title white
# Seperate content into an array of rows
content_list = content.split('\n')
# Draw side lines as well as content
line = line + "\n"
for i in range(size_y):
c_line = ""
for j in range(size_x):
if j == 0:
c_line = c_line + "\u2502"
elif j == size_x-1:
c_line = c_line + "\u2502"
else:
c_line = c_line + " "
c_line = c_line + "\n"
# Insert content line
if i < len(content_list) + BLANK_ROWS and i > BLANK_ROWS-1:
start = c_line[0:BLANK_COL]
end = c_line[len(content_list[i-BLANK_ROWS]) + BLANK_COL:]
c_line = Fore.CYAN+start+Fore.WHITE+content_list[i-BLANK_ROWS]+Fore.CYAN+end # Make title white
line = line + c_line
# Draw bottom line
for i in range(size_x):
if i == 0:
line = line + "\u2514"
elif i == size_x - 1:
line = line + "\u2518"
else:
line = line + "\u2500"
line = line + "\n"
return line
# Earnings
monthly_earnings = 30000
daily_earnings = monthly_earnings/30.5
hourly_earnings = daily_earnings/8
# Want to spend
spend = 2500
# Calculations
days_work = round(spend/daily_earnings,3)
hourly_work = round(spend/hourly_earnings,2)
content = "Spending " + str(spend) + " amounts to: \n" +\
str(hourly_work) + " hours of work \n" +\
str(days_work) + " hard days of labour"
print(gen_text_box("Spendy", 40, 4, content))
