# virtKeyBoard **Repository Path**: brt2/vkb ## Basic Information - **Project Name**: virtKeyBoard - **Description**: Virtual Keyboard for Linux-Desktop - **Primary Language**: Python - **License**: Not specified - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-02-07 - **Last Updated**: 2022-06-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Onboard for i5os 虚拟面板 [v4.0.3] @2019.03.07 Author: Bright Li # 软件依赖 - apt install python3-virtkey - apt install python3-pyqt5 - apt install python3-dbus.mainloop.pyqt5 # 架构说明 采用MVC模式,独立数据解析器(DataParser)-命令执行器(CmdExec)-Viewer。 由于各个项目的功能方案不同,同步不同的配置文件实现界面-数据-功能的变更。 该软件的Viewer方式与一般软件不同,需要保持置顶而不被其他软件覆盖。如需隐藏,需要通过进程间通讯传递消息。 由于软面板一般做为辅助软件,提供了多种进程间交互方式,如dbus/zmq/mqtt等,方便其主程序的调用和操控。 # 软件实现 UI-Button可以区分按下/抬起状态;而对于其需要执行的命令,则分为KeyCmd和NonKeyCmd两种: - SwitchBtn: 按键动作的抽象类:同样区分按下/抬起状态,与UI的状态匹配,并通过UI反馈按键状态;包含isPressed、isSticky等属性; - NonKeyCmd: 非按键动作的抽象类,以Just_One_Time方式执行,通过按键动作触发。命令的执行与按键状态无关,亦无反馈状态。 由于Cmd动作的区别可能只关乎IO信号不同,故经常作为单例或全局变量的形式存在,例如Key_Char、Key_PLC等; RealKeyboard: 虚拟键盘类,组合了各种类型按键,如Key_Char、Key_Mode、Key_Func等等。Key_Char以单例形式存在,Key_Mode对象属性不同,则根据配置文件生成Key_Mode列表(dict)... VirtualKeyboard: 虚拟键盘类(继承自NonKeyCmd)——RealKeyboard可以仿真键盘按下/抬起动作,而VirtualKeyboard则通过队列存储了相关的动作,而在非[pressed]状态时统一执行 --> 用于解决[pressed]触发导致键盘丢失抬起动作的响应 Key: 按键抽象类,继承自KeyCmd,用于记录当前按键的状态。对于sticky属性,主要体现为忽略release动作,并保存sticky状态用以在第二次按下时,按照release方式执行动作。 sticky_status: Button的黏滞属性用于标识是否存在sticky状态;拓展QPushButton的down属性--downEx,用以记录按钮包括黏滞在内的多种状态;其反馈形式为更新qss样式或切换背景图片 # 皮肤 参考 ./sample/ 目录 - start.sh 脚本用于启动 - qss 文件用于定义默认图元样式 - config: - 格式无关:xml/json/pydict/... - 文件用于定义元素(Btn)及功能 - layout: - 格式无关:svg/json/qt.ui/解析png... - 定义元素的几何参数,如位置、尺寸等 # V2 1. 在面板上点击按钮时,对于输出字符,一般输出对象为当前顶层窗口。故如果需要将字符输出在次顶层窗口(即面板点击之前的窗口)上,面板的层次属性不允许置顶(或者不截获按键事件)。 1. 对于Onboard来说,其UI类[KeyboardGTK]继承自gtk.DrawingArea,而该类默认不响应任何事件(且子类未实现对键盘事件的响应),故键盘事件在次顶层窗口响应并打印字符。 1. [KeyboardGTK]类只注册了若干事件:鼠标点击、释放、鼠标离开窗口等事件,不包括键盘事件。故键盘事件不在该窗口显示。自定义鼠标点击事件的响应函数并不执行顶层窗口的切换! # V3 1. UI-Viewer的实现改为Qt框架,面板的悬浮效果依靠的是QtWindow的属性:Qt.FramelessWindowHint | Qt.WindowDoesNotAcceptFocus | Qt.WindowStaysOnTopHint 1. 鉴于xml可读性的优势,将sok文件类型(Json)更新为xml(基本放弃json格式的维护) 1. 开发PLC功能、Shell功能 1. 支持svg缩放面板显示分辨率 1. 提供编辑模式的console版本DataEditor 1. 通过封装的make_pyc()函数实现代码编译,并利用Makefile实现代码打包和安装 # V4 1. 独立提供的DBus功能接口(将功能作为独立后台进程,提供SystemBus接口) # 使用限制 无法在VNC环境下使用——VNC对XKBlib的支持不够,导致python-virtkey模块无法生效; 关于该项问题,vnc4server的启动配置文件中,通过配置 ```bash export XKB_DEFAULT_RULES=base export QT_XKB_CONFIG_ROOT="/usr/share/X11/xkb:$QT_XKB_CONFIG_ROOT" ```