键盘控件

官网地址:https://lcd4linux.bulix.org/wiki/widget_keypad

键盘控件

键盘控件和键盘设备允许你使用(显示器)上的常见按钮,像是上,下,左,右,确定,取消等。该功能于2006年2月添加到CVS/SVN版本中,现在仍在发展。它只在少数几个显示器设备上可用:~Crystalfontz~ 635, ~LCD2USB~ 和 ~LW_ABP~。LCD4Linux-0.10.1-RC1版本同时还支持~CwLinux~。

键盘控件是唯一一个不用用到 update 参数的控件。它在按钮按下或者释放的时候刷新,而不是事先设定一个时间间隔来刷新。刷新时表达式 expression 被重新赋值。你可以通过它来~执行一些外部程序~(像是reboot之类的)。或者简单地改变一个变量的值(它可能在另一个控件里被用到)。

键盘控件与输出线的对应关系写在布局类的节里:就像你用Row*.Col*放置其它控件一样。你可以用 'Keypad#' 这么一行来说明键盘控件与输出线的对应关系。注意:在布局类的节里’#’的取值并不重要,只要保证它不与其它键的取值冲突就行。

定义一个键盘控件的方法如下:

  1. Widget <name> { # 控件名
  2. class 'Keypad' # 控件类型
  3. position <confirm|cancel|up|down|left|right> # 身份
  4. state <pressed|released> # 触发状态
  5. expression <string> # 表达式
  6. }


参数

参数 含义 说明
position 身份 (控件)绑定的按钮是什么,默认绑定确定键(confirm)。
state 触发状态 是在按钮按下时触发还是释放时触发,默认是按下(pressed)时触发
expression 表达式 控件绑定的表达式(它将在触发后执行)。


例子:

下面是一个 ‘用按键来增加显示的变量值’ 的例子:

  1. Widget mytext {
  2. class 'Text'
  3. expression foo
  4. update 100
  5. }
  6. Widget keyok {
  7. class 'Keypad'
  8. position 'confirm'
  9. expression foo = foo + 1
  10. }
  11. Variable {
  12. foo 1
  13. }
  14. Layout demokeypad {
  15. Row1.Col1 'mytext'
  16. Keypad1 'keyok'
  17. }

一个更加复杂的例子,用按键来滚动输出的启动信息(dmesg):

  1. Widget dmesg1 {
  2. class 'Text'
  3. expression file::readline('/var/log/dmesg',currline)
  4. width 20
  5. update tick
  6. }
  7. Widget dmesg2 {
  8. class 'Text'
  9. expression file::readline('/var/log/dmesg',currline+1)
  10. width 20
  11. update tick
  12. }
  13. Widget dmesg3 {
  14. class 'Text'
  15. expression file::readline('/var/log/dmesg',currline+2)
  16. width 20
  17. update tick
  18. }
  19. Widget dmesg4 {
  20. class 'Text'
  21. expression file::readline('/var/log/dmesg',currline+3)
  22. width 20
  23. update tick
  24. }
  25. Widget keyup {
  26. class 'Keypad'
  27. position 'up'
  28. state 'pressed'
  29. expression currline = currline-1
  30. }
  31. Widget keydown {
  32. class 'Keypad'
  33. position 'down'
  34. state 'pressed'
  35. expression currline = currline+1
  36. }
  37. Layout showdmesg {
  38. Row1 {
  39. Col1 'dmesg1'
  40. }
  41. Row2 {
  42. Col1 'dmesg2'
  43. }
  44. Row3 {
  45. Col1 'dmesg3'
  46. }
  47. Row4 {
  48. Col1 'dmesg4'
  49. }
  50. Keypad1 'keyup'
  51. Keypad2 'keydown'
  52. }
  53. Variables {
  54. tick 100
  55. currline 1
  56. }

一个 ‘用按键确认重新启动’ 的例子,(右按键用于确认重启,左按键用于取消,重启用到了exec命令):

  1. widget keyRight{
  2. class 'Keypad'
  3. position 'right'
  4. state 'pressed'
  5. expression msg = 'Reboot? OK to confirm' ; rebootmenu = 1
  6. }
  7. widget keyConfirm{
  8. class 'Keypad'
  9. position 'confirm'
  10. state 'pressed'
  11. expression msg = rebootmenu == 1 ? exec('/sbin/shutdown -r now',1000000) : 'Right arrow to reboot'
  12. exec('/sbin/shutdown -r now', 1000000);
  13. }
  14. widget keyLeft{
  15. class 'Keypad'
  16. position 'left'
  17. state 'pressed'
  18. expression msg = 'Right arrow to reboot' ; rebootmenu = 0
  19. }
  20. widget msgtxt {
  21. class 'Text'
  22. expression msg
  23. width 20
  24. update 100
  25. }
  26. Layout Default {
  27. Row1.Col1 'msgtxt'
  28. Row2.Col1 rebootmenu
  29. Keypad1 'keyRight'
  30. Keypad2 'keyConfirm'
  31. Keypad3 'keyLeft'
  32. }
  33. Variables {
  34. tick 500
  35. msg 'Right arrow to reboot'
  36. rebootmenu 0
  37. }