PySimpleGUI/DemoPrograms/Demo_Graph_Noise.py

78 lines
2.0 KiB
Python

#!/usr/bin/env python
import PySimpleGUI as sg
import random
import sys
'''
Example of random line in Graph element.
'''
STEP_SIZE = 1
SAMPLES = 300
SAMPLE_MAX = 300
CANVAS_SIZE = (300, 300)
def main():
global g_exit, g_response_time
layout = [[sg.Text('Enter width, height of graph')],
[sg.Input(size=(6, 1), key='w'), sg.Input(size=(6, 1), key='h')],
[sg.Ok(), sg.Cancel()]]
window = sg.Window('Enter graph size', layout)
event, values = window.read()
if event is None or event == 'Cancel':
return
CANVAS_SIZE = int(values['w']), int(values['h'])
window.close()
# start ping measurement thread
sg.change_look_and_feel('Black')
sg.set_options(element_padding=(0, 0))
layout = [[sg.Button('Quit', button_color=('white', 'black'))],
[sg.Graph(CANVAS_SIZE, (0, 0), (SAMPLES, SAMPLE_MAX)
background_color='black', key='graph')], ]
window = sg.Window('Canvas test', layout, grab_anywhere=True,
background_color='black', no_titlebar=False,
use_default_focus=False, finalize=True)
graph = window['graph']
prev_response_time = None
i = 0
prev_x, prev_y = 0, 0
graph_value = 250
while True:
event, values = window.read(timeout=0)
if event == 'Quit' or event is None:
break
graph_offset = random.randint(-10, 10)
graph_value = graph_value + graph_offset
if graph_value > SAMPLE_MAX:
graph_value = SAMPLE_MAX
if graph_value < 0:
graph_value = 0
new_x, new_y = i, graph_value
prev_value = graph_value
if i >= SAMPLES:
graph.move(-STEP_SIZE, 0)
prev_x = prev_x - STEP_SIZE
graph.draw_line((prev_x, prev_y), (new_x, new_y), color='white')
prev_x, prev_y = new_x, new_y
i += STEP_SIZE if i < SAMPLES else 0
window.close()
if __name__ == '__main__':
main()