bcdamenu¶
Creates a GUI menu button to start common beam line software
Provides¶
- bcdamenu : the button menu
Package Information¶
- author Pete R. Jemian
- email jemian@anl.gov
- copyright 2009-2019, Pete R. Jemian
- license ANL OPEN SOURCE LICENSE (see LICENSE.txt file)
- documentation http://bcdamenu.readthedocs.io
- source https://github.com/BCDA-APS/bcdamenu
- PyPI https://pypi.python.org/pypi/bcdamenu
- version 2019.05.0
- release 10.ge5f1c32.dirty
- published Jun 13, 2019
Usage¶
typical: | user@linux > bcdamenu path/to/settings_file.ini &
|
---|---|
bash starter file: | |
#!/bin/bash
bcdamenu path/to/settings_file.ini &
|
|
usage: | user@linux > bcdamenu
usage: BcdaMenu [-h] settingsfile
BcdaMenu: error: too few arguments
|
help: | user@linux > bcdamenu -h
usage: BcdaMenu [-h] settingsfile
BcdaMenu: Creates a GUI menu button to start common beam line software
positional arguments:
settingsfile Settings file (.ini)
optional arguments:
-h, --help show this help message and exit
|
Contents¶
Settings File¶
The BcdaMenu GUI is configured by the content provided in a settings file which name is specified on the command line when starting the program. For example, this Linux command:
bcdamenu path/to/menus_settings.ini &
Version “2017.3.0” format of the Settings file¶
The settings file version 2017.3.0 uses the .ini format, a structure similar to what you would find in Microsoft Windows INI files. This format was chosen for its minimal approach to language markup. The examples provided should guide you to the syntax. For more details, see the documentation for the Python ConfigParser. The web has many explanations of this informal format.
Settings file elements¶
The settings file consists of sections which are lines starting with “[” and ending with “]”, such as [section_name]. In BcdaMenu, these sections are single words with no embedded white space.
Within a section, one or more lines are given with the syntax of key = value (or key: value). It is expected by the .ini format that any key is unique within its section. In BcdaMenu, the key has two parts. First an integer is given that is used to sort the menu’s items in order`. The integer is not required to be strictly increasing from 1. Gaps and negative numbers are also allowed. Keep the integers between -9999 .. 9999 to avoid any potential misunderstandings. You will not have that many menu items.
Refer to the Example settings file section for an example settings file. As the examples show, both key and value are quite flexible strings. A key should not contain either the “:” or “=” separator characters. The comment characters allowed by the .ini format should also be avoided within either key or value content.
{BcdaMenu] section: | |||||||
---|---|---|---|---|---|---|---|
This section expects the following keys and values. Other keys and values will be ignored.
|
|||||||
menu sections: | As referenced by menus or submenu keys. Each menu section must have a one-word name with no internal white space (to simplify the parsing of names in the [BcdaMenu] section. All menu (and submenu) sections must be unique with the settings file. If the same name is used in more than one section, a configparser.DuplicateSectionError exception will be raised. |
||||||
other sections: | will be ignored |
Each popup menu is configured by the keys and values of a menu section.
title: | Use this as the title on the popup button or submenu name. If the title key is not present, the name of the menu section will be used as the text of the popup button. |
||||||
---|---|---|---|---|---|---|---|
separator: | draws a horizontal separator line in the menu |
||||||
numbered lines: | specification of a menu item
where:
|
Shortcut keys are not supported for any menu items.
Example Settings File¶
The settings file in the source code distribution
(download
,
also shown below)
is an example demonstrating the various
features used by BcdaMenu.
The example settings file (highlighted lines show the sections, lines 1, 6, & 19 and the specification of the popup menus, line 4) is shown next.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | [BcdaMenu]
title = BcdaMenu: 9-ID-C USAXS
version = 2017.3.0
menus = USAXS linux
[USAXS]
title = 9-ID-C USAXS
1 SAXS Imaging tool = /APSshare/epd/rh6-x86/bin/python /home/beams/USAXS/Apps/USAXS_dataworker/Main.py
2 sample and detector XY position tool = wxmtxy.csh
3 separator =
4 USAXS Q calculator = qToolUsaxs.csh
5 9-ID-C USAXS controls (MEDM) = start_epics
6 Save Instr. status to Elog = saveToElog.csh
7 PyMca = /APSshare/bin/pymca
8 USAXS sample stage tool = /home/beams/USAXS/Apps/wxmtusaxs/wxmtusaxs
9 separator =
10 submenu = example_submenu
[linux]
1 Xload = xload
2 FireFox = firefox
[example_submenu]
title = this is an example of a submenu
1 comment = echo "this is not a comment"
# this is a comment
|
This settings file produces a GUI titled 9-ID-C USAXS menu with two user menus: USAXS and linux. The following screen views are from Linux.
This is the USAXS menu:
This is the linux menu:
The “Help” popup menu button¶
The Help popup menu button is controlled by the program and is not configurable by the user through the settings file.
This is the Help menu:
These items are available in the Help popup menu:
- About … : prints to the console basic information about this program
- Reload User Menus : reloads the settings file (use this when editing/revising that file)
- (Un)hide history panel : if checked, show a history panel with command output
- scroll to new output : if checked, always scroll when new output is received
- command echo : if checked, show command in history when executed
- toggle Debug flag : if checked, turns on diagnostic output
Examples¶
Linux: variety of possibilities¶
an example from Linux with a number of possibilities
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | # bcdamenu.ini
#
# settings file for BcdaMenu GUI
[BcdaMenu]
title = BcdaMenu: jemian@gov
version = 2017.3.0
menus = IOC BlueSky linux
[IOC]
title = IOCs on gov
20 submenu = iocgov
42 submenu = iocprj
[iocgov]
title = IOC: gov (synApps 5.8)
## synApps 5.8 IOC has start/stop/status/console features
1 caQtDM iocgov = cd /home/oxygen/JEMIAN/sandbox/ioc/gov; ./start_caQtDM.sh
# 2 screen editor = # this is not supported yet
10 separator =
8 start IOC = cd /home/oxygen/JEMIAN/sandbox/ioc/gov/iocBoot/iocLinux; ./gov.sh start
14 console iocgov = cd /home/oxygen/JEMIAN/sandbox/ioc/gov/iocBoot/iocLinux; gnome-terminal -e "./gov.sh console"
15 status iocgov = cd /home/oxygen/JEMIAN/sandbox/ioc/gov/iocBoot/iocLinux; ./gov.sh status
23 stop iocgov = cd /home/oxygen/JEMIAN/sandbox/ioc/gov/iocBoot/iocLinux; ./gov.sh stop
[iocprj]
title = IOC: prj on gov (synApps 5.6)
# synApps 5.6 did not have console & process management
101 caQtDM = cd /home/oxygen/JEMIAN/sandbox/ioc/prj; ./start_caQtDM
103 start = /home/oxygen/JEMIAN/bin/start_ioc_prj.sh
114 console = cd /home/oxygen/JEMIAN/sandbox/ioc/prj/iocBoot/iocLinux; gnome-terminal -e "screen -r"
[linux]
1 edit settings file = /bin/nedit-client /home/oxygen/JEMIAN/bin/bcdamenu.ini
2 type settings file = /bin/cat /home/oxygen/JEMIAN/bin/bcdamenu.ini
44 xload = xload
45 Ku'damm clock = blnuhr
[BlueSky]
title = NSLS-II BlueSky
14 BlueSky console = cd /home/oxygen/JEMIAN/Documents; gnome-terminal -e "/home/oxygen/JEMIAN/bin/use_bluesky.sh bluesky"
20 submenu = BlueSky-mongodb
90 submenu = BlueSky-documentation
[BlueSky-mongodb]
title = mongodb viewer
22 start mViewer server (console) = cd /home/oxygen/JEMIAN/Apps/mViewer; gnome-terminal -e "./start_mviewer.sh 8086"
24 mongodb viewer in web browser (chrome) = /bin/google-chrome http://localhost:8086/index.html
25 mongodb viewer hints = echo "host: gov.aps.anl.gov port: 27017 others leave blank"
[BlueSky-documentation]
title = web documentation
92 BlueSky documentation = /bin/google-chrome http://nsls-ii.github.io/bluesky
93 NSLS-II Software documentation = /bin/google-chrome http://nsls-ii.github.io
|
Windows: caQtDM & PyMca¶
an example from Windows showing one absolute path and one default path
1 2 3 4 5 6 7 8 9 10 11 12 13 | [BcdaMenu]
title = BcdaMenu: amb (Windows)
version = 2017.3.0
menus = amb Windows
[amb]
#title =
1 CaQtDM = "D:\Program Files\caQTDM\bin\windows-x64\caQtDM.exe"
3 separator =
7 PyMca = PyMca
[Windows]
10 edit settings file = "D:\Apps\Sublime Text\sublime_text.exe" C:\Users\Pete\.bcdamenu.ini
|
History panel in main window¶
With version 2017.4.0, the BcdaMenu was transformed from a button window style to a main window style of application. This change gained several features:
- keyboard motion between the various menus and menu items
- a status line to report program information (like the unimenu predecessor of BcdaMenu)
- a main window panel to gather any command output and show history
The history panel (like real history) cannot be changed after it has been written. Both stderr and stdout from any command are combined and reported in the window. There are options (under the Help menu) to control what is written to the history.
Since the original program did not have a history panel, the default is to not display the history panel. Again, the Help menu has an item to show/hide the history.
Installation¶
Install this program from the Python Package Index (PyPI) using the pip command:
pip install bcdamenu
pip install --no-deps bcdamenu
The --no-deps
option tells pip not to download and attempt
to build newer versions of other required packages.
Requirements¶
- Python 2.7
- PyQt4
Your system will need to have the package PyQt4.QtGui already installed. A Python 2.7 distribution, such as Anaconda Python provides this package.
This program was developed on a Windows workstation and tested with various Linux distributions (RHEL7, Linux Mint, Raspberry Pi). It is expected to run on any host that provides the standard Python 2.7 packages and PyQt4.
or
- Python 3.6+
- PyQt5
Development and testing have progressed to include Python 3.6 or higher and PyQt5.
Source : about
¶
source code: about¶
show the About box
Usage (example)
ui = about.InfoBox(self)
ui.setTodoURL(__issues__)
ui.setDocumentationURL(__url__)
ui.setLicenseURL(__license_url__)
ui.setTitle(config_file_parser.MAIN_SECTION_LABEL)
ui.setVersionText("software version: " + __version__)
ui.setSummaryText(__doc__.strip())
ui.setAuthorText(__author__)
ui.setCopyrightText(__copyright__)
ui.show()
InfoBox ([parent, settings]) |
a Qt GUI for the About box |
myLoadUi (ui_file[, baseinstance]) |
load a .ui file for use in building a GUI |
-
class
bcdamenu.about.
InfoBox
(parent=None, settings=None)[source]¶ a Qt GUI for the About box
setTodoURL
(url)set the URL for the issue tracker setDocumentationURL
(url)set the URL for the documentation setLicenseURL
(url)set the URL for the software license text setTitle
(text)set the title in the About box setVersionText
(text)set the version text in the About box setSummaryText
(text)set the description in th e About box setAuthorText
(text)set the author list in the About box setCopyrightText
(text)set the copyright string in the About box
-
bcdamenu.about.
myLoadUi
(ui_file, baseinstance=None, **kw)[source]¶ load a .ui file for use in building a GUI
Wraps uic.loadUi() with code that finds our program’s resources directory.
See: http://nullege.com/codes/search/PyQt4.uic.loadUi See: http://bitesofcode.blogspot.ca/2011/10/comparison-of-loading-techniques.html inspired by: http://stackoverflow.com/questions/14892713/how-do-you-load-ui-files-onto-python-classes-with-pyside?lq=1
Change History¶
Production¶
2019.05.0: | |
---|---|
2017.9.0: | |
2017.4.0: | |
2017.3.5: |
|
2017.3.3: | |
2017.3.2: | |
2017.3.0: |
|
Development¶
2017-03-20: |
|
---|
License¶
Copyright (c) 2009-2019, UChicago Argonne, LLC
All Rights Reserved
BcdaMenu
BCDA, Advanced Photon Source, Argonne National Laboratory
OPEN SOURCE LICENSE
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer. Software changes,
modifications, or derivative works, should be noted with comments and
the author and organization's name.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the names of UChicago Argonne, LLC or the Department of Energy
nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written
permission.
4. The software and the end-user documentation included with the
redistribution, if any, must include the following acknowledgment:
"This product includes software produced by UChicago Argonne, LLC
under Contract No. DE-AC02-06CH11357 with the Department of Energy."
****************************************************************************
DISCLAIMER
THE SOFTWARE IS SUPPLIED "AS IS" WITHOUT WARRANTY OF ANY KIND.
Neither the United States GOVERNMENT, nor the United States Department
of Energy, NOR uchicago argonne, LLC, nor any of their employees, makes
any warranty, express or implied, or assumes any legal liability or
responsibility for the accuracy, completeness, or usefulness of any
information, data, apparatus, product, or process disclosed, or
represents that its use would not infringe privately owned rights.
****************************************************************************