Tag Archives: Wxpython

本文程序在Windows7 + python2.7 + wx2.9 + pygame1.9 下调试正常通过。 这几天在给一座桥写实时监控程序(众:你丫去年不就在写这玩意儿么,怎么今年又写开了……答:去年写的是个检测,就相当于给数据做了个皮肤,今年做的是监测,连着几百号传感器呢,技术含量不能同日而语……)。出于种种目的我终于说服项目组允许我拿python写这个程序,以前就很少写GUI程序,这下自己也纯属赶鸭子上架,结果没想到还遇到了个麻烦。 是这样的,桥上有个传感器,可以感应到有车辆从桥上经过,这个传感器可以记录到这个车的车速、加速度、轴重、轴距等等信息,然后工控机1受到这些数据后会向局域网广播,我写的程序跑在工控机2上,收到数据在屏幕显示就行了,这个过程倒是不难,只要下面几句就能完成:

  1. s=socket.socket(socket.af_inet,socket.sock_dgram)   
  2. s.setsockopt(socket.sol_socket,socket.so_reuseaddr,1)   
  3. socket.setdefaulttimeout(0.5)   
  4. ip=socket.gethostbyname(socket.gethostname())   
  5. d,a=s.recvfrom(90)   
  6. s.close()  

 

因为这个数据什么时候发过来并不知道,所以应该开个线程然后while循环这句d,a=s.recvfrom(90),当收到数据就出发个事件,但是我研究好久线程间通信、事件什么的也没弄出来,只好写了个轮循,就是收到数据就放到一个大家都能访问的空列表里,在画动画的时候不断检查这个列表长度,一旦列表长度大于0就从里边取数据,取一个删一个。这样写好像比较笨,再看了“小明明s à domicile”里写的设计模式后发现这个其实符合观察者模式,与其不断查这个列表不如在收数据这里调用画动画的函数,这样来通知效果应该会好些。说起来,在Python Essential Reference里有个生产者消费者模型,记得以前看操作系统原理看过,可惜没用上。 收上数据直接显示应该就行了吧,这个本来挺简单但是项目组要求这个显示一定要用个动画来显示,具体就是来个车要能看到一个格子里面有这个车的所有信息,然后这个格子要从屏幕下方移动到屏幕上方,定住;下一个移动到这个之后,如此循环,当屏幕上攒够4个就把最上面那个移走,整体往上顶一个,再把新的移上来,大致就是怎么个效果:

Record Read More →