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 ----可索引访问的
随机推荐
- linux centos7 安装mono
1.看官方的命令: 另外一种是下载压缩包解压之后安装: https://apps.fedoraproject.org/packages/mono/ 三.安装Mono需要的GDI+兼容API的库Libg ...
- doctype和Quirks模式
doctype: 告诉浏览器使用什么模式去渲染页面,可能会影响页面的css渲染和js代码的执行. DTD :为了兼容旧的浏览器渲染方式,将DTD作为参数告诉浏览器使用什么模式渲染页面.始于IE6; 1 ...
- 基于MicroBlaze 的嵌入式系统设计
reference: http://xilinx.eetrend.com/d6-xilinx/article/2013-03/3863.html 摘 要:当今时代,嵌入式系统已经无所不在,与人们 ...
- Centos7下mysql5.7.22主从配置
一:服务器配置 1.1修改root密码: ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxx'; 1.2添加远程登陆用户: GRANT ALL PRIV ...
- Thread.join方法的解析(转)
原文链接:https://www.cnblogs.com/huangzejun/p/7908898.html 1. join() 的示例和作用 1.1 示例 1 // 父线程 2 public cla ...
- easyui再学习的一部分代码
<%-- Created by IntelliJ IDEA. User: zhen Date: // Time: : To change this template use File | Set ...
- 设置table中的td一连串内容自动换行
遇到一长串字母撑出了td宽度,导致整个表格错乱,如图: , 解决办法: 第一: table 加上css: table-layout: fixed;(此css属性 表示 列宽由表格宽度和列宽度设定.不会 ...
- L252
How often have you heard the saying, "Stop and smell the roses?" Odds are, you've come acr ...
- 在Linux系统下mail命令的用法
在Linux系统下mail命令的测试 1. 最简单的一个例子: mail -s test admin@aispider.com 这条命令的结果是发一封标题为test的空信给后面的邮箱,如果你有mta并 ...
- 【Python】unittest-3
一.@unittest.skip("skipping this case") # 无条件忽略该测试方法 二.@unittest.skipIf(a > 5, "con ...