Added location parameter so that launchers can place these widgets at any location on multiple screens
This commit is contained in:
parent
8fc47b964a
commit
d2102c8b17
6 changed files with 147 additions and 46 deletions
|
@ -1,5 +1,6 @@
|
|||
import PySimpleGUI as sg
|
||||
import psutil
|
||||
import sys
|
||||
|
||||
"""
|
||||
Another simple Desktop Widget using PySimpleGUI
|
||||
|
@ -23,36 +24,46 @@ def human_size(bytes, units=(' bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB')):
|
|||
|
||||
|
||||
sg.theme(THEME)
|
||||
def main(location):
|
||||
graph = sg.Graph(GSIZE, (0, 0), GSIZE, key='-GRAPH-', enable_events=True)
|
||||
layout = [[graph]]
|
||||
|
||||
graph = sg.Graph(GSIZE, (0, 0), GSIZE, key='-GRAPH-', enable_events=True)
|
||||
layout = [[graph]]
|
||||
window = sg.Window('CPU Usage Widget Square', layout, location=location, no_titlebar=True, grab_anywhere=True, margins=(0, 0), element_padding=(0, 0), alpha_channel=ALPHA, finalize=True, right_click_menu=[[''], 'Exit'])
|
||||
|
||||
window = sg.Window('CPU Usage Widget Square', layout, no_titlebar=True, grab_anywhere=True, margins=(0, 0), element_padding=(0, 0), alpha_channel=ALPHA, finalize=True)
|
||||
|
||||
text_id2 = graph.draw_text(f'CPU', (GSIZE[0] // 2, GSIZE[1] // 4), font='Any 20', text_location=sg.TEXT_LOCATION_CENTER, color=sg.theme_button_color()[0])
|
||||
text_id2 = graph.draw_text(f'CPU', (GSIZE[0] // 2, GSIZE[1] // 4), font='Any 20', text_location=sg.TEXT_LOCATION_CENTER, color=sg.theme_button_color()[0])
|
||||
|
||||
|
||||
while True: # Event Loop
|
||||
# ----------- update the graphics and text in the window ------------
|
||||
cpu_percent = psutil.cpu_percent(interval=1)
|
||||
# Draw the filled rectangle
|
||||
rect_height = int(GSIZE[1] * float(cpu_percent) / 100)
|
||||
rect_id = graph.draw_rectangle((0, rect_height), (GSIZE[0], 0), fill_color=sg.theme_button_color()[1], line_width=0)
|
||||
# Draw the % used text and the close "X" on bottom
|
||||
text_id1 = graph.draw_text(f'{int(cpu_percent)}%', (GSIZE[0] // 2, GSIZE[1] // 2), font='Any 40', text_location=sg.TEXT_LOCATION_CENTER, color=sg.theme_button_color()[0])
|
||||
text_id3 = graph.draw_text('❎', (0, 0), font='Any 8', text_location=sg.TEXT_LOCATION_BOTTOM_LEFT, color=sg.theme_button_color()[0])
|
||||
# put the bar behind everything else
|
||||
graph.send_figure_to_back(rect_id)
|
||||
while True: # Event Loop
|
||||
# ----------- update the graphics and text in the window ------------
|
||||
cpu_percent = psutil.cpu_percent(interval=1)
|
||||
# Draw the filled rectangle
|
||||
rect_height = int(GSIZE[1] * float(cpu_percent) / 100)
|
||||
rect_id = graph.draw_rectangle((0, rect_height), (GSIZE[0], 0), fill_color=sg.theme_button_color()[1], line_width=0)
|
||||
# Draw the % used text and the close "X" on bottom
|
||||
text_id1 = graph.draw_text(f'{int(cpu_percent)}%', (GSIZE[0] // 2, GSIZE[1] // 2), font='Any 40', text_location=sg.TEXT_LOCATION_CENTER, color=sg.theme_button_color()[0])
|
||||
# text_id3 = graph.draw_text('❎', (0, 0), font='Any 8', text_location=sg.TEXT_LOCATION_BOTTOM_LEFT, color=sg.theme_button_color()[0])
|
||||
# put the bar behind everything else
|
||||
graph.send_figure_to_back(rect_id)
|
||||
|
||||
# update the window, wait for a while, then check for exit
|
||||
event, values = window.read(timeout=UPDATE_FREQUENCY_MILLISECONDS)
|
||||
if event == sg.WIN_CLOSED or event == 'Exit':
|
||||
break
|
||||
if event == '-GRAPH-': # exit if clicked in the bottom left 20 x 20 pixel area
|
||||
if values['-GRAPH-'][0] < 20 and values['-GRAPH-'][1] < 20:
|
||||
# update the window, wait for a while, then check for exit
|
||||
event, values = window.read(timeout=UPDATE_FREQUENCY_MILLISECONDS)
|
||||
if event == sg.WIN_CLOSED or event == 'Exit':
|
||||
break
|
||||
# erase figures so they can be redrawn
|
||||
graph.delete_figure(rect_id)
|
||||
graph.delete_figure(text_id1)
|
||||
graph.delete_figure(text_id3)
|
||||
window.close()
|
||||
if event == '-GRAPH-': # exit if clicked in the bottom left 20 x 20 pixel area
|
||||
if values['-GRAPH-'][0] < 20 and values['-GRAPH-'][1] < 20:
|
||||
break
|
||||
# erase figures so they can be redrawn
|
||||
graph.delete_figure(rect_id)
|
||||
graph.delete_figure(text_id1)
|
||||
# graph.delete_figure(text_id3)
|
||||
window.close()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
location = sys.argv[1].split(',')
|
||||
location = (int(location[0]), int(location[1]))
|
||||
else:
|
||||
location = (None, None)
|
||||
main(location)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue