python Console menu
I just finished a demo which is to provide an easy way to control hardware resources of A sample. The communication between PC and A sample is UART. The PC software is written by Python.
Python can implement features very soon and has a rich libraries. I used two libraries, one is console-menu, and another is pyserial.
pip install console-menu
https://pypi.org/project/console-menu/
pip install pyserial
https://pypi.org/project/pyserial/
When startup, a prompt input will display:

Input the COM number what you want. And then the operation window will display.

You can select the menu for future operation, e.g. Alarm,

I attached the source code here for your reference.
from consolemenu import ConsoleMenu
from consolemenu.items import FunctionItem, SubmenuItem, CommandItem
from consolemenu import Screen
import time
import Serial class GPIOOperator(object):
def __init__(self, UART, menu, cmd, text):
self._uart = UART
self._cmd = cmd
self._state = 0
submenu = ConsoleMenu(text, show_exit_option=True)
function_item = FunctionItem("ON", self.OnTrunOnClick, should_exit=False)
submenu.append_item(function_item)
function_item = FunctionItem("OFF", self.OnOnTurnOffClick, should_exit = False)
submenu.append_item(function_item)
submenu_item = SubmenuItem(text, submenu, menu=menu, should_exit = True)
menu.append_item(submenu_item) def _GenData(self):
data = (self._cmd << 4) | (self._stat << 1)
parity = 0
for index in range(0, 8):
if (data & 1 << index):
parity = parity + 1 if (parity % 2 == 0):
data = data | 1;
return data; def OnTrunOnClick(self):
self._stat = 1
data = self._GenData() if (self._uart.isOpen()):
self._uart.write(data) def OnOnTurnOffClick(self):
self._stat = 0
data = self._GenData() if (self._uart.isOpen()):
self._uart.write(data) class GPIOOperators(object):
def __init__(self):
self._menu = ConsoleMenu("FPC 220 firmware == PC Test Software")
self._uart = Serial.UART()
self._CMD_ALARM = 0
self._STR_ALARM = "Alarm"
self._alarm = GPIOOperator(self._uart, self._menu, self._CMD_ALARM, self._STR_ALARM) self._CMD_ALARM_LED = 1
self._STR_ALARM_LED = "Alarm LED"
self._alarm = GPIOOperator(self._uart, self._menu, self._CMD_ALARM_LED, self._STR_ALARM_LED) self._CMD_PATTERN = 2
self._STR_PATTERN = "Pattern"
self._alarm = GPIOOperator(self._uart, self._menu, self._CMD_PATTERN, self._STR_PATTERN) self._CMD_TROUBLE = 3
self._STR_TROUBLE = "Trouble"
self._alarm = GPIOOperator(self._uart, self._menu, self._CMD_TROUBLE, self._STR_TROUBLE) self._CMD_GREEN_LED = 4
self._STR_GREEN_LED = "Green LED"
self._alarm = GPIOOperator(self._uart, self._menu, self._CMD_GREEN_LED, self._STR_GREEN_LED) self._CMD_CLEANME = 5
self._STR_CLEANME = "Clean me"
self._alarm = GPIOOperator(self._uart, self._menu, self._CMD_CLEANME, self._STR_CLEANME) FunctionItem("Input COM", self.OnComInput(), should_exit=False) def OnComInput(self):
ret = Screen().input("Set the COM number:");
self._uartnum = ret def run(self):
Screen().clear()
while(1):
'''if (self._uart.isOpen() == False):
self._uart.open(self._uartnum)
if (self._uart.isOpen() == False):
print("Cannot Open the UART!")
time.sleep(1)
else:
self._menu.show()
'''
self._menu.show()
if self._menu.is_selected_item_exit() == True:
break self._uart.close() if __name__ == "__main__":
GPIOOperations = GPIOOperators()
GPIOOperations.run()
python Console menu的更多相关文章
- 不能在Python Console中运行pytest
在Python Console中运行pytest发现报错了 这是为什么?因为Python Console已经是进入python之后的环境,就像在python自带的IDLE中运行pytest pytes ...
- Pycharm中Python Console与Terminal的区别
1.Python Console是Python交互式模式,可以直接输入代码,然后执行,并立刻得到结果 2.Terminal是命令行模式,与系统的CMD(命令提示符)一样,可以运行各种系统命令
- pycharm Python Console调试 & django 调试
1.设置断点,然后debug 2.如果在运行中想修改变量,可以直接在pycharm中修改 如将列表的 13改成3,然后选中 Excuting Selection in console ...
- python console
print(sys.stdout.encoding, locale.getpreferredencoding ()) windows console : chcp 65001; 在设置了这个环境变量时 ...
- python之menu
只有主菜单没有二级菜单的例子: from tkinter import * root=Tk() root.wm_title('同济大学财务管理系统') menubar=Menu(root)#指定菜单实 ...
- Python Tkinter Menu
本人想开发一个简易的搜图GUI,基于此,选择用Tkinter模块开发. 需要开发出菜单栏 1 from Tkinter import * 2 3 4 root = Tk() 5 root.title( ...
- color the python console text
//install termcolor module cd \ cd python27 cd scripts pip install termcolor pip install colorama // ...
- QGis 利用Python Console编写脚本进行批量处理
前言 这篇文章里,我们要完成一些数据的合并,计算等操作. 准备工作 首先要了解Qgis的编程模型,具体参考文章<QGIS里的编程模型>及<Qgis里的查询过滤>.了解了Qgis ...
- python console 设立快捷键 学习源码 用到英语
arbitrary---随意 iterable----迭代 invalid syntax -----无效的语法 subscriptable ----可索引访问的
随机推荐
- 基于MicroBlaze 的嵌入式系统设计
reference: http://xilinx.eetrend.com/d6-xilinx/article/2013-03/3863.html 摘 要:当今时代,嵌入式系统已经无所不在,与人们 ...
- shiro学习(三)权限 authenrication
主体 主体,即访问应用的用户,在Shiro中使用Subject代表该用户.用户只有授权后才允许访问相应的资源. 资源 在应用中用户可以访问的任何东西,比如访问JSP页面.查看/编辑某些数据.访问某个业 ...
- shell脚本实例-for实现批量主机的探测
#!/usr/bin/bash >ip.txt for i in {2..254} do { ip=192.168.234.$i ping -c1 -W1 $ip &>/dev/n ...
- PAT 乙级 1056. 组合数的和(15)
给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字.要求所有可能组合出来的2位数字的和.例如给定2.5.8,则可以组合出:25.28.52.58.82.85,它们的和为330. 输入 ...
- redis的哨兵模式
我是在一台服务器上安装了三个redis 一主两从 想安装gcc gcc-c++ make tcl lrzsz yum -y install gcc gcc-c++ make tcl lrzsz ...
- mac os x lipo 工具
lipo是管理Fat文件的工具,可以查看平台列表,提取.重新打包 dreamdeMac-mini:test dream$ lipo -info libtest001.a Architectures i ...
- WPA2 Key Reinstallation 漏洞
漏洞形成: 必要条件1:WPA2 协议存在一个消息重放漏洞,导致多组相同数据被使用了相同的密钥加密. ciphertext = plaintext xor AES(key, IV||counter) ...
- Oracle 10g安装报错记录
环境描述linux 5.6 安装Oracle 10.2.0.1.0 DBCA问题 1)DBCA图形化界面,出现乱码 测试环境,操作系统中文字符编码导致 export LANG=C 2)DBCA图形化点 ...
- VMware网络连接IP设置
网络配置(仅主机模式) 一.改变虚拟机IP地址达到联网目的 仅主机模式,第一步,打开我的电脑属性,查看VMt1网卡IP设置,设置一个区段:192.168.xx.aa xx.aa自由设置,简 ...
- make命令回显Makefile执行脚本命令
/********************************************************************** * make命令回显Makefile执行脚本命令 * 说 ...