最近应客户要求,需要设计一个小软件,实现计算机远程控制NAO机器人,三个按钮控制三种动作。
其实并不难,但是我想用Python和PyQt4来做,顺便练练手,也是方便与NAO机器人内部的python语言模块交互。
于是,经过一周的编写,改进,调试,终于完成了这个小东东。也作为自己的第一个PyQt4作品,小小纪念一下:)
1. 首先明确需求
【1】主窗口有三个按钮,窗口尺寸为1280*48,是一个大长条子。副窗口用于配置机器人IP。
【2】无线网络控制,三个按钮分别对应‘bad’,'ok', 'good'命令
【3】最后发布成为双击启动式的软件。
2. 设计规划
【1】既然要设计界面,和python语言相关的GUI工具也不少,首选PyQt,这是Qt为python语言实现的GUI工具。其实就是把C++做成了python语言的接口,供给python程序调用。
【2】无线网络控制,因为功能比较简单,传输的数据量不大,所以选择UDP协议的socket方式。当然也是用python里的socket模块。
【3】最后的发布,这个在windows下比较麻烦,暂时没搞定成exe可执行文件。不过,安装了python软件后,在.py文件中加入一句命令后,双击.py文件同样可以执行。
就是这条命令:path.append(os.getcwd()) 相当于把当前文件的目录暂时加入到系统环境变量中。
3. 界面设计
【1】界面设计,使用PyQt4的Qt Designer工具,相当简单好用!设计界面的时候专注于界面,不用管内部程序实现。有很多界面设计功能,没有研究多深,就是用了几个PushButton,LineEdit,Label控件。命名,布局做好后保存成.ui文件就行了。比如文件名为:RunDlg.ui
【2】设计完成界面后,还要用pyuic4或者pyrcc4工具将UI界面文件转化成python代码,在shell下(Dos--cmd)输入:
pyuic4 -o ui_RunDlg.py RunDlg.ui 就可以自动生成界面的python代码了!so cool!
【3】为了以后方便,不用每次都在shell命令行输入,可以自己用python语言写一个小程序实现:
OK了!每次双击执行这个文件就可以将本目录下的所有ui文件自动生成python代码了。
4. socket通信
【1】用python里的socket模块,在机器人内部建立一个server,始终监控接收9549端口,将接收到的数据输出self.output(data)
【2】在计算机端,建立client,比较简单,不用连接,不用绑定,不用监听。暂时不用计算机端接收数据。
需要发送数据的时候,用一句: SOCK.sendto('bad', (HOST, PORT)) 就可以了!
5. 载入UI对象
【1】用pyuic4自动生成的文件名为ui_RunDlg.py , 文件内部的类名为Ui_RunDlg
用这两条语句,还需要建立一个桌布类class RunDlg(QtGui.QWidget):就可以使用生成UI窗口类Ui_RunDlg了。
在RunDlg类的init函数中生成对象、生成UI窗口,语句为:
6. 信号与槽
【1】Qt界面里的按钮怎么响应事件啊?答案就是:信号与槽
PyQt中支持同名传递信号,就是说根据控件的名字来自动选择哪个槽,比如界面里的一个按钮,要响应clicked信号:
最后,附带主要源码: