使用DxVcl为Python的飞信库写一个简单的GUI

简介:

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

2011040810500331.png

主代码如下:

复制代码
 
 
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而已,另外发送短信,也就只写了发送给自己而已。如果个人有需要的自行扩展一下吧,嘿嘿,完整代码下载



本文转自 不得闲 博客园博客,原文链接:http://www.cnblogs.com/DxSoft/archive/2011/04/08/2009132.html   ,如需转载请自行联系原作者

相关文章
|
4天前
|
XML 前端开发 数据格式
BeautifulSoup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据
【5月更文挑战第10天】BeautifulSoup 是 Python 的一个库,用于解析 HTML 和 XML 文件,即使在格式不规范的情况下也能有效工作。通过创建 BeautifulSoup 对象并使用方法如 find_all 和 get,可以方便地提取和查找文档中的信息。以下是一段示例代码,展示如何安装库、解析 HTML 数据以及打印段落、链接和特定类名的元素。BeautifulSoup 还支持更复杂的查询和文档修改功能。
13 1
|
1天前
|
机器学习/深度学习 数据挖掘 PyTorch
10个非常有用的Python库,你知道几个?
这些库覆盖了数据科学、机器学习、Web开发和其他领域,使Python成为一个多用途的编程语言。它们在各种项目和领域中都非常有用。
15 2
|
2天前
|
SQL 关系型数据库 数据库连接
使用 Python 访问数据库的基本方法
【5月更文挑战第12天】在Python中操作数据库涉及安装数据库驱动(如mysql-connector-python, psycopg2, pymongo)、连接数据库、执行查询/更新、处理结果集及关闭连接。使用ORM(如SQLAlchemy)可简化操作。通过上下文管理器(with语句)能更好地管理资源和错误。注意根据实际需求处理事务、错误和安全性,例如使用SSL连接。
13 2
|
3天前
|
JSON 监控 调度
局域网管理软件的自动化任务调度:Python 中的 APScheduler 库的应用
使用 Python 的 APScheduler 库可简化局域网管理中的自动化任务调度。APScheduler 是一个轻量级定时任务调度库,支持多种触发方式如间隔、时间、日期和 Cron 表达式。示例代码展示了如何创建每 10 秒执行一次的定时任务。在局域网管理场景中,可以利用 APScheduler 定期监控设备状态,当设备离线时自动提交数据到网站,提升管理效率。
21 0
|
3天前
|
数据采集 数据可视化 数据挖掘
如何利用Python中的Pandas库进行数据分析和可视化
Python的Pandas库是一种功能强大的工具,可以用于数据分析和处理。本文将介绍如何使用Pandas库进行数据分析和可视化,包括数据导入、清洗、转换以及基本的统计分析和图表绘制。通过学习本文,读者将能够掌握利用Python中的Pandas库进行高效数据处理和可视化的技能。
|
5天前
|
机器学习/深度学习 自然语言处理 算法
Gensim详细介绍和使用:一个Python文本建模库
Gensim详细介绍和使用:一个Python文本建模库
15 1
|
5天前
|
JSON 数据格式 Python
Python 的 requests 库是一个强大的 HTTP 客户端库,用于发送各种类型的 HTTP 请求
【5月更文挑战第9天】`requests` 库是 Python 中用于HTTP请求的强大工具。要开始使用,需通过 `pip install requests` 进行安装。发送GET请求可使用 `requests.get(url)`,而POST请求则需结合 `json.dumps(data)` 以JSON格式发送数据。PUT和DELETE请求类似,分别调用 `requests.put()` 和 `requests.delete()`。
17 2
|
6天前
|
JSON 数据格式 索引
python之JMESPath:JSON 查询语法库示例详解
python之JMESPath:JSON 查询语法库示例详解
14 0
|
13天前
|
Python
在Python中绘制K线图,可以使用matplotlib和mplfinance库
【5月更文挑战第1天】使用Python的matplotlib和mplfinance库可绘制金融K线图。mplfinance提供便利的绘图功能,示例代码显示如何加载CSV数据(含开盘、最高、最低、收盘价及成交量),并用`mpf.plot()`绘制K线图,设置类型为'candle',显示移动平均线(mav)和成交量信息。可通过调整参数自定义图表样式,详情参考mplfinance文档。
36 2
|
14天前
|
机器学习/深度学习 边缘计算 TensorFlow
【Python机器学习专栏】Python机器学习工具与库的未来展望
【4月更文挑战第30天】本文探讨了Python在机器学习中的关键角色,重点介绍了Scikit-learn、TensorFlow和PyTorch等流行库。随着技术进步,未来Python机器学习工具将聚焦自动化、智能化、可解释性和可信赖性,并促进跨领域创新,结合云端与边缘计算,为各领域应用带来更高效、可靠的解决方案。