A python library for interfacing with LCDd
, the server
component of the commonly known LCDproc
Features:
-
Object-oriented interface support for all native
LCDd
widgets- Full frame support, nest widget objects in frames, treat frames like widget containers
- Support for user-created composite widgets, that can be used just like native widgets (no easy API for now, changes to come later)
-
Decoupled thread to service
LCDd
screen switching responses -
One I/O method to update screen, no funky exception handling everywhere
pip install pylcddc
- See
TODO.md
for more information and TODOs
- Tested on
LCDd
packaged withLCDproc
version0.5.9
- Protocol version
0.3
pylcddc.client
: client for LCDdpylcddc.screen
: screens to attach to clientspylcddc.widgets
: widgets to place in screenspylcddc.exceptions
: exceptions raised by the library
pylcddc.responses
: LCDd response decoder and abstractionspylcddc.commands
: LCDd request generation
Don't really use these for production code...
See more examples in /demo
import pylcddc.client as client
import pylcddc.widgets as widgets
import pylcddc.screen as screen
title = widgets.Title('title_widget',
'Hello, World!')
main_scr = screen.Screen('main', [title])
c = client.Client('localhost', 13666)
c.add_screen(main_scr)
input('Press any key to exit')
c.close()
import pylcddc.client as client
import pylcddc.widgets as widgets
import pylcddc.screen as screen
import platform
flavorful_text_widgets = [widgets.String(f'flv_tx{i}', 1, 1 + i, text) for
i, text in enumerate(
'now you see me\nnow you dont\nso scary\nsuch wow'.splitlines())]
frame_top = widgets.Frame('frame_top', flavorful_text_widgets,
1, 1, 10, 1, 10, 4,
widgets.Frame.Direction.VERTICAL, 8)
platform_text = widgets.Scroller('platform', 1, 2, 20, 1,
widgets.Scroller.Direction.HORIZONTAL, 1,
'pylcddc running on '
+ ' '.join(platform.uname()))
main_scr = screen.Screen('main', [frame_top, platform_text])
c = client.Client('localhost', 13666)
c.add_screen(main_scr)
input('Press any key to exit')
c.close()
import pylcddc.client as client
import pylcddc.widgets as widgets
import pylcddc.screen as screen
import pylcddc.exceptions as lcdexcept
import time
time_string = widgets.Scroller('time', 1, 1, 20, 2,
widgets.Scroller.Direction.HORIZONTAL, 8,
time.ctime())
main_scr = screen.Screen('main', [time_string],
heartbeat=screen.ScreenAttributeValues.Heartbeat.OFF)
c = client.Client('localhost', 13666)
c.add_screen(main_scr)
print('pylcdd time demo\nUse ^C to exit')
try:
while True:
time_string.text = time.ctime()
c.update_screens([main_scr])
print('updated time to: ', time.ctime())
time.sleep(0.1)
except lcdexcept.RequestError as e:
print('LCDd refused our request', e)
except lcdexcept.FatalError as e:
print('pylcddc fatal internal error', e)
except KeyboardInterrupt:
print('exitting')
c.close() # there might be exceptions from OS system call failures here
See LICENSE.txt
for more details