Python的好处,就是类库超多,多到只有你想不到的库,而没有你想到的,他却没有的库。所以飞信,在Python下也有一个开源的类库,这个就是PyFetion,他自己有带一个Demo,不过是一个CGI的程序,没有窗口界面,于是用之前Delphi写的DxVcl为这个飞信库实现了一个简单的界面GUI。代码很简单,就是两个窗口,一个窗口是验证码输入的窗口,还有一个是主窗口。界面信息:

主代码如下:

class SeriForm(Form):
def __init__(self,Owner):
self.Caption = '请输入验证码'
self.Position = 5
self.BorderStyle = 3
self.Width = 275
self.Height = 162
self.lbl = Label(self)
self.lbl.SetProps(Parent = self,Caption = '请输入验证码')
self.lbl.SetBounds(24,16,72,13)
self.EdtNum = Edit(self)
self.EdtNum.Parent = self
self.EdtNum.SetBounds(102,11,139,21)
self.Img = Image(self)
self.Img.Parent = self
self.Img.SetBounds(24,35,217,59)
self.Img.Center = True
self.Img.Picture.LoadFromFile('fetion_verify.jpg')
self.BtnOk = Button(self)
self.BtnOk.SetProps(Parent = self,Caption='确定')
self.BtnOk.SetBounds(24,100,75,25)
self.BtnOk.OnClick = self.BtnOkClick
self.BtnCancel = Button(self)
self.BtnCancel.SetProps(Parent = self,Caption='取消')
self.BtnCancel.SetBounds(166,100,75,25)
self.BtnCancel.OnClick = self.BtnCancelClick
def BtnCancelClick(self,Sender):
self.Close()
def BtnOkClick(self,Sender):
self.ModalResult = mrok

def GetSeriCode(self,picFile):
"""picFile 验证码图片"""
SeriFrm = SeriForm(None)
if SeriFrm.ShowModal() == mrok:
ret = SeriFrm.EdtNum.Text
else:
ret = ''
SeriFrm.Free()
return ret

class MainForm(Form):
def __init__(self,Owner):
self.SetProps(Width=492,Height=401,BorderStyle=3)
self.lbUser = Label(self)
self.lbUser.SetProps(Parent = self,Caption = '用户')
self.lbUser.SetBounds(16,8,24,13)
self.EdtUser = Edit(self)
self.EdtUser.Parent = self
self.EdtUser.SetBounds(55,4,121,21)
self.lbl = Label(self)
self.lbl.SetProps(Parent = self,Caption = '密码')
self.lbl.SetBounds(192,8,24,13)
self.EdtPwd = Edit(self)
self.EdtPwd.SetProps(Parent = self,PasswordChar='*')
self.EdtPwd.SetBounds(234,4,121,21)
self.lbl1 = Label(self)
self.lbl1.SetProps(Parent = self,Caption = '好友列表')
self.lbl1.SetBounds(8,27,48,13)
self.FriendList = ListBox(self)
self.FriendList.Parent = self
self.FriendList.SetBounds(8,47,137,314)
self.Memo1 = Memo(self)
self.Memo1.Parent = self
self.Memo1.SetBounds(151,47,325,185)
self.Memo2 = Memo(self)
self.Memo2.Parent = self
self.Memo2.SetBounds(151,238,325,87)
self.BtnSend = Button(self)
self.BtnSend.SetProps(Parent = self,Caption = '发送')
self.BtnSend.SetBounds(401,331,75,25)
self.BtnSend.OnClick = self.BtnSendClick

self.BtnLog = Button(self)
self.BtnLog.SetProps(Parent = self,Caption = '登录')
self.BtnLog.SetBounds(361,3,75,25)
self.BtnLog.OnClick = self.BtnLogClick
self.Phone = PyFetion('','','TCP')
self.threads = []
def BtnSendClick(self,Sender):
if self.Phone and self.Phone.alive:
if self.Phone.send_sms(toUTF8(self.Memo2.Lines.Text)):
self.Memo1.Lines.Add('给自己发送短信息成功,目前只写了给自己发送信息')
else:
ShowMessage('无效的登录')
def BtnLogClick(self,Sender):
if self.BtnLog.Caption == '登出':
self.Phone.logout()
self.BtnLog.Caption = '登录'
self.FriendList.Items.Clear()
return 1
self.Phone.mobile_no = self.EdtUser.Text
self.Phone.passwd = self.EdtPwd.Text
try:
ret = self.Phone.login(FetionOnline)
except PyFetionSupportError,e:
ShowMessage('手机号未开通飞信')
return 1
except PyFetionAuthError,e:
ShowMessage('手机号密码错误')
return 1
except PyFetionSocketError,e:
ShowMessage(e.msg)
return 1
finally:
pass
if ret:
ShowMessage('登录成功')
#增加好友列表
buddys = self.Phone.get_contactlist()
if not buddys:
ShowMessage('无好友')
else:
self.BtnLog.Caption = '登录'
for i in buddys:
if buddys[i][0]=='':
buddys[i][0]=i[4:4+9]
for i in range(len(buddys)):
s = "%-4d%-8s%-20s" % (i,status[buddys[buddys.keys()[i]][2]].decode('gb2312').encode('utf8'),buddys[buddys.keys()[i]][0],)
s = s.decode('utf8').encode('gb2312')
self.FriendList.Items.Add(s)
self.threads.append(fetion_recv(self)) #启动接收包
self.threads.append(fetion_alive(self.Phone)) #启动心跳
for t in self.threads:
t.setDaemon(True)
t.start()
else:
ShowMessage('失败')
return 1

def guimain(argv=None):
PyFetion.GetSeirCodeEvent = GetSeriCode
Application.Initialize()
f = MainForm(Application)
f.Show()
FreeConsole()
Application.Run()

本代码就是在原作者的Fetion.py上修改来的,仅仅就是套上了一个界面GUI而已,另外发送短信,也就只写了发送给自己而已。如果个人有需要的自行扩展一下吧,嘿嘿,完整代码下载

转载于:https://www.cnblogs.com/DxSoft/archive/2011/04/08/2009132.html

使用DxVcl为Python的飞信库写一个简单的GUI相关推荐

  1. 用python的OpenCV库写一个寻找色块的代码

    使用OpenCV库写一个寻找色块的代码可以通过以下几步实现:1.导入OpenCV库:2. 读取图像并转换成HSV格式:3. 设定色块的颜色范围:4. 根据设定的颜色范围,使用inRange函数来判断每 ...

  2. 如何搭建python框架_从零开始:写一个简单的Python框架

    原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...

  3. python初学者可以做的金融小程序-Python入门 —— 用pycharm写一个简单的小程序3...

    环境:Win10操作系统:Python3.7:Pycharm 题目来源:PTA 编程实例1:日期格式化 世界上不同国家有不同的写日期的习惯.比如美国人习惯写成"月-日-年",而中国 ...

  4. python简单编程例子-Python入门 —— 用pycharm写一个简单的小程序3

    环境:Win10操作系统:Python3.7:Pycharm 题目来源:PTA 编程实例1:日期格式化 世界上不同国家有不同的写日期的习惯.比如美国人习惯写成"月-日-年",而中国 ...

  5. linux 嗅探 源码,Linux下用libpcap库写一个简单的C嗅探程序(记录)

    一.准备工作: 安装库lipcap库文件: yum -y install gcc gcc-c++ yum -y install libpcap libpcap-devel 二.源码: 将下面代码保存为 ...

  6. Python/用 Pgzrun 库做一个简单小游戏

    游戏内容: 有敌人从屏幕上方冲向你的人物.你可以用方向键去操控人物移动,空格键发射武器. '_Henry原创_'import pgzrun import random# 设置窗口宽和高 WIDTH = ...

  7. python的turtle库画一个简单swun校徽

    一直想画点儿东西,因为觉得turtle好像小学微机课接触过,那个时候可能是编程最早的启蒙,觉得很神奇. 效果图 其实原图是这样的--因为turtle没有现成的转着圈输出字母的方法,我也就偷懒了-- 还 ...

  8. 利用python的turtle库画一个图形

    今天我们用python的turtle库制作一个简单的图形(新手必看) [注:turtle是python的标准自带库,无需安装!] 好的废话不多说我们开始写代码 #制作人:中将 #一起自学python ...

  9. python用turtle库写六角形

    python用turtle库写六角形独特代码(新手向) 思路 1.选定适宜规格画笔 2.选落脚及其初始偏转角度(可不偏转) 3.开始绘制两个三角形 (1)其中第一个三角形绘制完毕需重新选择落脚点(2) ...

  10. python解释器用什么写的_用 Python 从零开始写一个简单的解释器(3)

    到目前为止,我们已经为解释器写了一个词法分析器和 一个解析器组合子库.在这里,我们会创建抽象语法树(AST)的数据结构,使用组合子库写一个解析器,组合子库可以实现将词法分析器返回的标记列表转换为一个抽 ...

最新文章

  1. 软件项目管理重点总结
  2. 聊聊dubbo的Filter
  3. [vue] 怎么在watch监听开始之后立即被调用?
  4. jre6-java运行环境_Java运行环境(JRE8)64位 1.8.0.25
  5. Java加密与解密的艺术~AES实现
  6. Unity Android 动态更新 Assembly-CSharp.dll
  7. 停车场系统管理数据库设计说明书
  8. 学习Python比较好的书籍推荐
  9. 最齐全的文化石 艺术石VRay材质球素材,速来收藏
  10. excel只显示公式,不显示结果
  11. 谈谈浏览器中富文本编辑器的技术演进
  12. 炎炎夏日,深夜详谈nginx的配置中location和rewrite的语法规则(从入门到高手的第六步)
  13. 计算机睡眠状态单机游戏,睡眠神经图 电脑版
  14. 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'Logger' 中的标识列插入显式值
  15. docker介绍和安装以及常用命令
  16. Google Chrome 旧版本下载地址
  17. 织梦功能模块模板路径对应表
  18. 为什么说云计算运维是新“贵”?
  19. YDOOK:百度联盟 加入百度联盟的正确方式
  20. 如何自定义一个45度旋转的TextView,实现类似右上角文字角标的效果

热门文章

  1. android手机版本为什么打不开,手机打不开,不能打开usb调试,如何刷机
  2. Leetcode之跳跃游戏Ⅱ
  3. 三级分类用sql语句怎么写(多级分类的写法)
  4. kafka入门1-集群生产消息 报:ERROR Producer connection to localhost:9092 unsuccessful
  5. ES(Elasticsearch)解除索引只读限制
  6. 使用Maven 插件构建docker 镜像和推送仓库
  7. 织梦系统MySQL安装_如何更改已安装的织梦dedecms系统数据库表前缀?
  8. 阶段3 3.SpringMVC·_06.异常处理及拦截器_5 SpringMVC拦截器之编写controller
  9. 阶段3 1.Mybatis_09.Mybatis的多表操作_9 mybatis多对多操作-查询用户获取用户所包含的角色信息...
  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_1_缓冲流的原理...