TA的每日心情 | 无聊 2013-3-19 08:58 |
---|
签到天数: 2 天 连续签到: 1 天 [LV.1]初来乍到
|
本帖最后由 lawme 于 2013-6-30 12:40 编辑
1、问题的由来
RPi 的 GUI 太慢的问题,要等待 Wayland 来解决。
还有个选择,用 TUI 在一些场合代替 GUI。
TUI 是指“文本用户界面”,例如 raspi-config 的工作界面。
Linux 有实现 TUI 的系统命令,whiptail。
在 Raspbian 平台上,我从网上找了些用例,试了试 whiptail。
结果不怎么样,几乎不能正常工作。并且,如果处理复杂些的任务,
必须掌握 bash 的 script 语言,是件枯燥乏味的事情。
于是,上网查询,找到了 newt。
我猜想,newt 的意思是 new whiptail,有点英文的文字游戏。
newt 原生于 C 语言。C 处理 text 不是强项,甚至烦琐吃力。
继续查找,终于找到了 Python 对它的封装,并且是 Raspbian 平台的。
2、安装
找来的文件是 python-newt_0.52.14-11.1_armhf.deb
安装命令是 dpkg -i python-newt_0.52.14-11.1_armhf.deb
3、扩展 Python
我遇到了点小麻烦:
greenlet.h:8:20: 致命错误: Python.h:没有那个文件或目录,编译中断。
error: Setup script exited with error: command 'gcc' failed with exit status 1
解决方法是安装python-dev,这是Python的头文件和静态库包:
sudo apt-get install python-dev
之后,再次安装 pynewt 成功。
4、小小尝试
平时,常用 omxplayer 播放 mp3, mp4。
在终端上键盘操作比较费事,想省点气力,写了下面的 script。
它把指定目录中的mp3,mp4文件,置入 TUI 的 listbox中,用户
以方向键、回车键选择、确认就行了。
退出时,选择按钮“Exit”。
不能用鼠标,不是事件驱动的,那是 GUI 的事情。
import os,sys
from snack import *
lid = os.listdir('/home/pi/mp')
li3,li4 = [],[]
for a in lid:
if a[-4:]=='.mp3':
li3.append(a)
elif a[-4:]=='.mp4':
li4.append(a)
li3.sort()
li4.sort()
lid = []
for a in li3:
lid.append(a)
lid.append('-'*30)
for a in li4:
lid.append(a)
while True:
screen = SnackScreen()
li = Listbox(height = 16, width = 40, returnExit = 1)
n = 1
for a in li3:
li.append(a,n)
n += 1
li.append('-'*30,n)
n += 1
for a in li4:
li.append(a,n)
n += 1
bb = ButtonBar(screen, (("Exit","ok"),))
g = GridForm(screen, "Audio and Video", 1, 4)
g.add(li, 0, 0)
g.add(bb, 0, 3, growx = 1)
result = g.runOnce()
if bb.buttonPressed(result) == 'ok':
break
if lid[li.current()-1] == '-'*30:
continue
command = 'omxplayer /home/pi/mp/'+lid[li.current()-1]
os.system(command)
os.system('clear')
screen.finish()
|
|