p3lib 1.1.121__py2.py3-none-any.whl → 1.1.123__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
p3lib/ngt.py CHANGED
@@ -314,6 +314,14 @@ class TabbedNiceGui(object):
314
314
  self._logMessageCount += 1
315
315
  # We've received a log message so update progress bar if required.
316
316
  self._updateProgressBar(msg)
317
+ # Wait a moment for DOM to update, then scroll to the end of the log
318
+ # so that the message just added is visible.
319
+ ui.timer(0.05, lambda: ui.run_javascript("""
320
+ const el = document.querySelector('.my-log');
321
+ if (el) {
322
+ el.scrollTop = el.scrollHeight;
323
+ }
324
+ """), once=True)
317
325
 
318
326
  def _infoGT(self, msg):
319
327
  """@brief Update an info level message. This must be called from the GUI thread.
@@ -371,7 +379,13 @@ class TabbedNiceGui(object):
371
379
  if isinstance(rxMessage, dict):
372
380
  self._processRXDict(rxMessage)
373
381
 
374
- def initGUI(self, tabNameList, tabMethodInitList, reload=True, address="0.0.0.0", port=DEFAULT_SERVER_PORT, pageTitle="NiceGUI"):
382
+ def initGUI(self,
383
+ tabNameList,
384
+ tabMethodInitList,
385
+ reload=True,
386
+ address="0.0.0.0",
387
+ port=DEFAULT_SERVER_PORT,
388
+ pageTitle="NiceGUI"):
375
389
  """@brief Init the tabbed GUI.
376
390
  @param tabNameList A list of the names of each tab to be created.
377
391
  @param tabMethodInitList A list of the methods to be called to init each of the above tabs.
@@ -379,47 +393,53 @@ class TabbedNiceGui(object):
379
393
  @param reload If reload is set False then changes to python files will not cause the server to be restarted.
380
394
  @param address The address to bind the server to.
381
395
  @param The TCP port to bind the server to.
382
- @param pageTitle The page title that appears in the browser."""
383
- # A bit of defensive programming.
384
- if len(tabNameList) != len(tabMethodInitList):
385
- raise Exception(f"initGUI: BUG: tabNameList ({len(tabNameList)}) and tabMethodInitList ({len(tabMethodInitList)}) are not the same length.")
386
- tabObjList = []
387
- with ui.row():
388
- with ui.tabs().classes('w-full') as tabs:
389
- for tabName in tabNameList:
390
- tabObj = ui.tab(tabName)
391
- tabObjList.append(tabObj)
392
-
393
- with ui.tab_panels(tabs, value=tabObjList[0]).classes('w-full'):
394
- for tabObj in tabObjList:
395
- with ui.tab_panel(tabObj):
396
- tabIndex = tabObjList.index(tabObj)
397
- tabMethodInitList[tabIndex]()
398
-
399
- guiLogLevel = "warning"
400
- if self._debugEnabled:
401
- guiLogLevel = "debug"
402
-
403
- ui.label("Message Log")
404
- self._progress = ui.slider(min=0,max=TabbedNiceGui.MAX_PROGRESS_VALUE,step=1)
405
- self._progress.set_visibility(False)
406
- self._progress.min = 0
407
- # Don't allow user to adjust progress bar thumb
408
- self._progress.disable()
409
- self._log = ui.log(max_lines=2000)
410
- self._log.set_visibility(True)
396
+ @param pageTitle The page title that appears in the browser.
397
+ @param maxLogLines The maximum number of lines to be displayed in the log. Be aware setting this higher will cause the browser to use more memory."""
398
+ with ui.column().classes('h-screen w-screen p4'):
399
+ # A bit of defensive programming.
400
+ if len(tabNameList) != len(tabMethodInitList):
401
+ raise Exception(f"initGUI: BUG: tabNameList ({len(tabNameList)}) and tabMethodInitList ({len(tabMethodInitList)}) are not the same length.")
402
+ tabObjList = []
403
+ with ui.row():
404
+ with ui.tabs().classes('w-full') as tabs:
405
+ for tabName in tabNameList:
406
+ tabObj = ui.tab(tabName)
407
+ tabObjList.append(tabObj)
408
+
409
+ with ui.tab_panels(tabs, value=tabObjList[0]).classes('w-full'):
410
+ for tabObj in tabObjList:
411
+ with ui.tab_panel(tabObj):
412
+ tabIndex = tabObjList.index(tabObj)
413
+ tabMethodInitList[tabIndex]()
414
+
415
+ guiLogLevel = "warning"
416
+ if self._debugEnabled:
417
+ guiLogLevel = "debug"
418
+
419
+ ui.label("Message Log")
420
+ self._progress = ui.slider(min=0,max=TabbedNiceGui.MAX_PROGRESS_VALUE,step=1)
421
+ self._progress.set_visibility(False)
422
+ self._progress.min = 0
423
+ # Don't allow user to adjust progress bar thumb
424
+ self._progress.disable()
425
+ # Setup the log area to fill the available space in the page vertically and horizontally
426
+ # The 32px is to make space for the vertical scrollbar within the page or it will be
427
+ # shifted out of sight to the right.
428
+ # Previously used self._log = ui.log(max_lines=2000) but the ui.log() does not currently limit data in the log.
429
+ self._log = ui.log().classes('my-log grow w-full max-w-[calc(100%-32px)] overflow-auto box-border')
430
+ self._log.set_visibility(True)
411
431
 
412
- with ui.row():
413
- ui.button('Clear Log', on_click=self._clearLog)
414
- ui.button('Log Message Count', on_click=self._showLogMsgCount)
415
- ui.button('Quit', on_click=self.close)
432
+ with ui.row():
433
+ ui.button('Clear Log', on_click=self._clearLog)
434
+ ui.button('Log Message Count', on_click=self._showLogMsgCount)
435
+ ui.button('Quit', on_click=self.close)
416
436
 
417
- with ui.row():
418
- ui.label(f"Software Version: {self._programVersion}")
437
+ with ui.row():
438
+ ui.label(f"Software Version: {self._programVersion}")
419
439
 
420
- ui.timer(interval=TabbedNiceGui.GUI_TIMER_SECONDS, callback=self.guiTimerCallback)
421
- ui.timer(interval=TabbedNiceGui.PROGRESS_TIMER_SECONDS, callback=self.progressTimerCallback)
422
- ui.run(host=address, port=port, title=pageTitle, dark=True, uvicorn_logging_level=guiLogLevel, reload=reload)
440
+ ui.timer(interval=TabbedNiceGui.GUI_TIMER_SECONDS, callback=self.guiTimerCallback)
441
+ ui.timer(interval=TabbedNiceGui.PROGRESS_TIMER_SECONDS, callback=self.progressTimerCallback)
442
+ ui.run(host=address, port=port, title=pageTitle, dark=True, uvicorn_logging_level=guiLogLevel, reload=reload)
423
443
 
424
444
  def progressTimerCallback(self):
425
445
  """@brief Time to update the progress bar. We run the timer all the time because there appears to be a
@@ -939,4 +959,4 @@ class local_file_picker(ui.dialog):
939
959
  selected=selected[1:]
940
960
  selected = self.drives_toggle.value + selected
941
961
 
942
- self.submit([selected])
962
+ self.submit([selected])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: p3lib
3
- Version: 1.1.121
3
+ Version: 1.1.123
4
4
  Summary: A group of python modules for networking, plotting data, config storage, automating boot scripts, ssh access and user input output.
5
5
  License: MIT
6
6
  Author: Paul Austen
@@ -13,13 +13,13 @@ p3lib/login.html,sha256=DADTJGuvWQ-LTO4X6SaFdqK7JMW03DAa3lRieGD0d6g,2748
13
13
  p3lib/mqtt_rpc.py,sha256=6LmFA1kR4HSJs9eWbOJORRHNY01L_lHWjvtE2fmY8P8,10511
14
14
  p3lib/netif.py,sha256=3QV5OGdHhELIf4MBj6mx5MNCtVeZ7JXoNEkeu4KzCaE,9796
15
15
  p3lib/netplotly.py,sha256=PMDx-w1jtRVW6Od5u_kuKbBxNpTS_Y88mMF60puMxLM,9363
16
- p3lib/ngt.py,sha256=v1VZXN3qylLuGe53EkK25sn3esX96dq8jlLOfhQN6Zk,43390
16
+ p3lib/ngt.py,sha256=s-6e4E1Q2WXWMtHKjzYWabXjtFD224mIf2WIMgMI1I0,44625
17
17
  p3lib/pconfig.py,sha256=wGC6UJAIBksRjwKTfaw3Y6vAMkgey0QC2nhkCtqj1MQ,37738
18
18
  p3lib/ssh.py,sha256=OyoAQ_h1L2RfkjTAChDrvLFfl4Fe_gBNdX5rvK-wKiw,42125
19
19
  p3lib/table_plot.py,sha256=RPncwVlGUkkx5Fw0dHQedXo0TSPlTi__VrJBDzaMsuI,32116
20
20
  p3lib/uio.py,sha256=Aaxc99XiE3d2f9vLjaN-bZsckoNxay5t0ujdK6PXGrw,23265
21
21
  p3lib/windows_app.py,sha256=cSkGDIakamxylhOYk0BHjjUQwBBhOq7sij4a7xs9v44,3057
22
- p3lib-1.1.121.dist-info/LICENSE,sha256=igqTy5u0kVWM1n-NUZMvAlinY6lVjAXKoag0okkS8V8,1067
23
- p3lib-1.1.121.dist-info/METADATA,sha256=AjqxekZBuCKiGmHk1RKLjJSREv-01agXV6R7XqcU2GE,1382
24
- p3lib-1.1.121.dist-info/WHEEL,sha256=5druYqcII7zHXzX7qmN0TH895Jg3yuTtfjMgJIVBrKE,92
25
- p3lib-1.1.121.dist-info/RECORD,,
22
+ p3lib-1.1.123.dist-info/LICENSE,sha256=igqTy5u0kVWM1n-NUZMvAlinY6lVjAXKoag0okkS8V8,1067
23
+ p3lib-1.1.123.dist-info/METADATA,sha256=OtiYjBiAEoKURSc1KCzCHQ3we7q5nnabjvJXOeoxTug,1382
24
+ p3lib-1.1.123.dist-info/WHEEL,sha256=5druYqcII7zHXzX7qmN0TH895Jg3yuTtfjMgJIVBrKE,92
25
+ p3lib-1.1.123.dist-info/RECORD,,