More demo programs updates 🤦‍♂️ wow.....I thought for sure these were checked in....

This commit is contained in:
PySimpleGUI 2022-02-16 19:51:47 -05:00
parent cfe2c96a1f
commit 430d1bc77f
15 changed files with 655 additions and 72 deletions

View file

@ -2,6 +2,7 @@
import PySimpleGUI as sg
import sys
import psutil
import math
"""
Desktop floating widget - CPU Cores as Gauges
@ -17,20 +18,17 @@ import psutil
Copyright 2020 PySimpleGUI
"""
GRAPH_WIDTH = 120 # each individual graph size in pixels
GRAPH_HEIGHT = 40
# gsize = (120, 75)
# gsize = (85, 40)
gsize = (55, 30)
TRANSPARENCY = .8 # how transparent the window looks. 0 = invisible, 1 = normal window
NUM_COLS = 4
POLL_FREQUENCY = 2000 # how often to update graphs in milliseconds
POLL_FREQUENCY = 1500 # how often to update graphs in milliseconds
colors = ('#23a0a0', '#56d856', '#be45be', '#5681d8', '#d34545', '#BE7C29')
import math
import random
class Gauge():
def mapping(func, sequence, *argc):
"""
@ -56,7 +54,7 @@ class Gauge():
: Return
Addition result for number1 and number2.
"""
return number1 + number1
return number1 + number2
def limit(number):
"""
@ -67,7 +65,6 @@ class Gauge():
angel degree in 0 ~ 360, return 0 if number < 0, 360 if number > 360.
"""
return max(min(360, number), 0)
class Clock():
"""
Draw background circle or arc
@ -134,7 +131,7 @@ class Gauge():
self.figure = []
self.stop_angle = angle
self.graph_elem = graph_elem
self.new(degree=angle)
self.new(degree=angle, color=pointer_color)
def new(self, degree=0, color=None):
"""
@ -224,10 +221,10 @@ class Gauge():
All angles defined as count clockwise from negative x-axis.
Should create instance of clock, pointer, minor tick and major tick first.
"""
def __init__(self, center=(0, 0), start_angle=0, stop_angle=180, major_tick_width=5, minor_tick_width=2,major_tick_start_radius=90, major_tick_stop_radius=100, major_tick_step=30, clock_radius=100, pointer_line_width=5, pointer_inner_radius=10, pointer_outer_radius=75, pointer_color='white', pointer_origin_color='black', pointer_outer_color='white', pointer_angle=0, degree=0, clock_color='white', major_tick_color='black', minor_tick_color='black', minor_tick_start_radius=90, minor_tick_stop_radius=100, graph_elem=None):
def __init__(self, center=(0, 0), start_angle=0, stop_angle=180, major_tick_width=5, minor_tick_width=2,major_tick_start_radius=90, major_tick_stop_radius=100, minor_tick_step=5, major_tick_step=30, clock_radius=100, pointer_line_width=5, pointer_inner_radius=10, pointer_outer_radius=75, pointer_color='white', pointer_origin_color='black', pointer_outer_color='white', pointer_angle=0, degree=0, clock_color='white', major_tick_color='black', minor_tick_color='black', minor_tick_start_radius=90, minor_tick_stop_radius=100, graph_elem=None):
self.clock = Gauge.Clock(start_angle=start_angle, stop_angle=stop_angle, fill_color=clock_color, radius=clock_radius, graph_elem=graph_elem)
self.minor_tick = Gauge.Tick(start_angle=start_angle, stop_angle=stop_angle, line_width=minor_tick_width, line_color=minor_tick_color, start_radius=minor_tick_start_radius, stop_radius=minor_tick_stop_radius, graph_elem=graph_elem)
self.minor_tick = Gauge.Tick(start_angle=start_angle, stop_angle=stop_angle, line_width=minor_tick_width, line_color=minor_tick_color, start_radius=minor_tick_start_radius, stop_radius=minor_tick_stop_radius, graph_elem=graph_elem, step=minor_tick_step)
self.major_tick = Gauge.Tick(start_angle=start_angle, stop_angle=stop_angle, line_width=major_tick_width, start_radius=major_tick_start_radius, stop_radius=major_tick_stop_radius, step=major_tick_step, line_color=major_tick_color, graph_elem=graph_elem)
self.pointer = Gauge.Pointer(angle=pointer_angle, inner_radius=pointer_inner_radius, outer_radius=pointer_outer_radius, pointer_color=pointer_color, outer_color=pointer_outer_color, origin_color=pointer_origin_color, line_width=pointer_line_width, graph_elem=graph_elem)
@ -250,7 +247,7 @@ class Gauge():
if self.pointer:
self.pointer.move(delta_x, delta_y)
def change(self, degree=None, step=1):
def change(self, degree=None, step=1, pointer_color=None):
"""
Rotation of pointer
call it with degree and step to set initial options for rotation.
@ -266,17 +263,17 @@ class Gauge():
new_degree = now + step
if ((step > 0 and new_degree < self.pointer.stop_degree) or
(step < 0 and new_degree > self.pointer.stop_degree)):
self.pointer.new(degree=new_degree, color='red' if new_degree > 90 else None)
self.pointer.new(degree=new_degree, color=pointer_color)
return False
else:
self.pointer.new(degree=self.pointer.stop_degree, color='red' if self.pointer.stop_degree > 90 else None)
self.pointer.new(degree=self.pointer.stop_degree, color=pointer_color)
return True
# ------------------------------ BEGINNING OF CPU WIDGET GUI CODE ------------------------------
# DashGraph does the drawing of each graph
class DashGraph(object):
def __init__(self, graph_elem, text_elem, starting_count, color):
def __init__(self, gsize, graph_elem, text_elem, starting_count, color):
self.graph_current_item = 0
self.graph_elem = graph_elem # type: sg.Graph
self.text_elem = text_elem
@ -285,26 +282,36 @@ class DashGraph(object):
self.color = color
self.line_list = [] # list of currently visible lines. Used to delete oild figures
self.gauge = Gauge(pointer_color=color, clock_color=color, major_tick_color=color,
minor_tick_color=color, pointer_outer_color=sg.theme_text_color(), major_tick_start_radius=45,
minor_tick_start_radius=45, minor_tick_stop_radius=50, major_tick_stop_radius=50, major_tick_step=30, clock_radius=50, pointer_line_width=3,
pointer_inner_radius=10, pointer_outer_radius=50, graph_elem=graph_elem)
self.gauge = Gauge(pointer_color=color,
clock_color=color,
major_tick_color=color,
minor_tick_color=color,
pointer_outer_color=color,
major_tick_start_radius=gsize[1] - 10,
minor_tick_start_radius=gsize[1] - 10,
minor_tick_stop_radius=gsize[1] - 5,
major_tick_stop_radius=gsize[1] - 5,
clock_radius=gsize[1] - 5,
pointer_outer_radius=gsize[1] - 5,
major_tick_step=30,
minor_tick_step=15,
pointer_line_width=3,
pointer_inner_radius=10,
graph_elem=graph_elem)
self.gauge.change(degree=0)
def graph_percentage_abs(self, value):
if self.gauge.change():
if self.gauge.change(pointer_color='red' if value > 50 else None):
new_angle = value*180/100
self.gauge.change(degree=new_angle, step=new_angle)
self.gauge.change()
self.gauge.change(degree=new_angle, step=100, pointer_color='red' if value > 50 else None)
self.gauge.change(pointer_color='red' if value > 50 else None)
def text_display(self, text):
self.text_elem.update(text)
def main(location):
gsize = (100, 55)
# A couple of "User defined elements" that combine several elements and enable bulk edits
def Txt(text, **kwargs):
return(sg.Text(text, font=('Helvetica 8'), **kwargs))
@ -312,7 +319,7 @@ def main(location):
def GraphColumn(name, key):
layout = [
[sg.Graph(gsize, (-gsize[0] // 2, 0), (gsize[0] // 2, gsize[1]), key=key+'-GRAPH-')],
[sg.T(size=(5, 1), justification='c', font='Courier 14', k=key+'-GAUGE VALUE-')]]
[sg.T(size=(5, 1), justification='c', font='Courier 10', k=key+'-GAUGE VALUE-')]]
return sg.Column(layout, pad=(2, 2), element_justification='c')
num_cores = len(psutil.cpu_percent(percpu=True)) # get the number of cores in the CPU
@ -320,9 +327,7 @@ def main(location):
sg.theme('black')
sg.set_options(element_padding=(0,0), margins=(1,1), border_width=0)
# the clever Red X graphic
red_x = "R0lGODlhEAAQAPeQAIsAAI0AAI4AAI8AAJIAAJUAAJQCApkAAJoAAJ4AAJkJCaAAAKYAAKcAAKcCAKcDA6cGAKgAAKsAAKsCAKwAAK0AAK8AAK4CAK8DAqUJAKULAKwLALAAALEAALIAALMAALMDALQAALUAALYAALcEALoAALsAALsCALwAAL8AALkJAL4NAL8NAKoTAKwbAbEQALMVAL0QAL0RAKsREaodHbkQELMsALg2ALk3ALs+ALE2FbgpKbA1Nbc1Nb44N8AAAMIWAMsvAMUgDMcxAKVABb9NBbVJErFYEq1iMrtoMr5kP8BKAMFLAMxKANBBANFCANJFANFEB9JKAMFcANFZANZcANpfAMJUEMZVEc5hAM5pAMluBdRsANR8AM9YOrdERMpIQs1UVMR5WNt8X8VgYMdlZcxtYtx4YNF/btp9eraNf9qXXNCCZsyLeNSLd8SSecySf82kd9qqc9uBgdyBgd+EhN6JgtSIiNuJieGHhOGLg+GKhOKamty1ste4sNO+ueenp+inp+HHrebGrefKuOPTzejWzera1O7b1vLb2/bl4vTu7fbw7ffx7vnz8f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAJAALAAAAAAQABAAAAjUACEJHEiwYEEABniQKfNFgQCDkATQwAMokEU+PQgUFDAjjR09e/LUmUNnh8aBCcCgUeRmzBkzie6EeQBAoAAMXuA8ciRGCaJHfXzUMCAQgYooWN48anTokR8dQk4sELggBhQrU9Q8evSHiJQgLCIIfMDCSZUjhbYuQkLFCRAMAiOQGGLE0CNBcZYmaRIDLqQFGF60eTRoSxc5jwjhACFWIAgMLtgUocJFy5orL0IQRHAiQgsbRZYswbEhBIiCCH6EiJAhAwQMKU5DjHCi9gnZEHMTDAgAOw=="
layout = [[ sg.Button(image_data=red_x, button_color=('black', 'black'), key='Exit', tooltip='Closes window'),
layout = [[ sg.Button(image_data=sg.red_x, button_color=('black', 'black'), key='Exit', tooltip='Closes window'),
sg.Text(' CPU Core Usage')] ]
# add on the graphs
@ -342,10 +347,12 @@ def main(location):
use_default_focus=False,
finalize=True,
location=location,
right_click_menu=[[''], 'Exit'])
right_click_menu=[[''], 'Exit'],
# transparent_color='black',
)
# setup graphs & initial values
graphs = [DashGraph(window['-CPU-'+str(i)+'-GRAPH-'],
graphs = [DashGraph(gsize, window['-CPU-'+str(i)+'-GRAPH-'],
window['-CPU-'+str(i) + '-GAUGE VALUE-'],
0, colors[i%6]) for i in range(num_cores) ]