Skip to content

Instantly share code, notes, and snippets.

@snobu
Last active October 25, 2021 17:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save snobu/a836254489a3b01b9e3b087592c30cea to your computer and use it in GitHub Desktop.
Save snobu/a836254489a3b01b9e3b087592c30cea to your computer and use it in GitHub Desktop.
PySimpleGUI Thermostat example
#!/usr/bin/env python3
import PySimpleGUI as sg
def read_temp1():
return 24.0
def read_temp2():
return 21.1
def set_temp1(temp):
print(f'Update Temp 1 to value {temp}')
def set_temp2(temp):
print(f'Update Temp 2 to value {temp}')
# Alege tema de culori
# Toate temele sunt cuprinse aici:
# https://media.geeksforgeeks.org/wp-content/uploads/20200511200254/f19.jpg
# doar alegi numele
sg.theme('DarkAmber')
temp1 = read_temp1()
temp2 = read_temp2()
# Marimea font-ului da marimea elementului grafic si e controlata cu proprietatea
# font="Nume_font MARIME" ca mai jos
sensor_readings = [11.8, 12.1, 13.1, 14.6, 15.4, 16, 17, 18.0, 19.4, 20.6]
column1 = [[
sg.Text("Temp 1", size=(6,1), font="Helvetica 22", key="temp1_text"),
sg.Spin([x/10.0 for x in range(0, 600)], font=('monospace 42'), size=(4,1),
initial_value=temp1, change_submits=True, pad=(20,20,20,20), key='temp1_spin')
],
[
sg.Text("Temp 2", size=(6,1), font="Helvetica 22", key="temp2_text"),
sg.Spin([x/10.0 for x in range(5, 600)], font=('monospace 42'), size=(4,1),
initial_value=temp2, change_submits=True, pad=(20,20,20,20), key='temp2_spin'),
]]
column2 = [[
sg.Text("Temp 3", size=(6,1), font="Helvetica 22", key="temp3_text"),
sg.Spin([x/10.0 for x in range(0, 600)], font=('monospace 42'), size=(4,1),
initial_value=temp1, change_submits=True, pad=(20,20,20,20), key='temp3_spin')
],
[
sg.Text("Temp 4", size=(6,1), font="Helvetica 22", key="temp4_text"),
sg.Spin([x/10.0 for x in range(5, 600)], font=('monospace 42'), size=(4,1),
initial_value=temp2, change_submits=True, pad=(20,20,20,20), key='temp4_spin'),
]]
column3 = [[
sg.Text("Temp 5", size=(6,1), font="Helvetica 22", key="temp5_text"),
sg.Spin([x/10.0 for x in range(0, 600)], font=('monospace 42'), size=(4,1),
initial_value=temp1, change_submits=True, pad=(20,20,20,20), key='temp5_spin')
],
[
sg.Text("Temp 6", size=(6,1), font="Helvetica 22", key="temp6_text"),
sg.Spin([x/10.0 for x in range(5, 600)], font=('monospace 42'), size=(4,1),
initial_value=temp2, change_submits=True, pad=(20,20,20,20), key='temp6_spin'),
]]
layout = [
[
sg.Column(column1),
sg.Column(column2),
sg.Column(column3)
],
[
sg.Table(values=[sensor_readings[0:5]], headings=['T1', 'T2', 'T3', 'T4', 'T5'],
max_col_width=25,
font=('monospace 24'),
auto_size_columns=False,
display_row_numbers=False,
justification='center',
num_rows=1,
alternating_row_color='darkblue',
key='table1',
row_height=35)
],
[
sg.Table(values=[sensor_readings[5:10]], headings=['T6', 'T7', 'T8', 'T9', 'T10'],
max_col_width=25,
font=('monospace 24'),
auto_size_columns=False,
display_row_numbers=False,
justification='center',
num_rows=1,
alternating_row_color='darkblue',
key='table2',
row_height=35)
],
[
sg.Button('Buton 1', pad=(10, 40, 0, 0), font='Helvetica 20',
button_color=('white', 'black'), key='buton1'),
sg.Button('Buton 2', pad=(10, 40, 0, 0), font='Helvetica 20',
button_color=('white', 'black'), key='buton2'),
sg.Button('Buton 3', pad=(10, 40, 0, 0), font='Helvetica 20',
button_color=('white', 'firebrick3'), key='buton3'),
sg.Button('Buton 4', pad=(10, 40, 0, 0), font='Helvetica 20',
button_color=('white', 'springgreen4'), key='buton4'),
sg.Button('Buton 5', pad=(10, 40, 0, 0), font='Helvetica 20',
button_color=('white', 'springgreen4'), key='buton5'),
sg.Button('Buton 6', pad=(10, 40, 0, 0), font='Helvetica 20',
button_color=('white', 'springgreen4'), key='buton6'),
sg.Button('Buton 7', pad=(10, 40, 0, 0), font='Helvetica 20',
button_color=('white', 'springgreen4'), key='buton7')
]
]
window = sg.Window("Termostat", layout, grab_anywhere=False)
# Event Loop
# Bucla asa se executa atata timp cat interfata grafica e pe ecran
while True:
event, values = window.read()
new_temp1 = values['temp1_spin']
new_temp2 = values['temp2_spin']
if temp1 != new_temp1:
window['temp1_spin'].update(new_temp1)
set_temp1(new_temp1)
if temp2 != new_temp2:
window['temp2_spin'].update(new_temp2)
set_temp2(new_temp2)
# Executia programului se opreste daca fereastra e inchisa
if event == sg.WIN_CLOSED:
break
print("Done.")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment