查看: 4507|回复: 3

[经验] 使用 Python Newt 的笔记

[复制链接]
  • TA的每日心情
    无聊
    2013-3-19 08:58
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-6-30 12:39:01 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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()


    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2013-8-12 17:47
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2013-6-30 17:44:19 | 显示全部楼层
    本帖最后由 wyyyh 于 2013-6-30 20:02 编辑

    sudo apt-get install python-newt


    顶一个,哪儿能看点例子呢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2013-3-19 08:58
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2013-7-1 07:13:57 | 显示全部楼层
    上传文件 examples.7z

    我学编程,一直是以example为样本,比着葫芦画瓢。

    examples.7z

    34.05 KB, 下载次数: 6

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-5-20 10:01
  • 签到天数: 41 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-7-1 09:39:43 | 显示全部楼层
    笔记不错,顶一个!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 08:20 , Processed in 0.144277 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.