Base PyQt4, Simple Web APP Framwork-阿里云开发者社区

开发者社区> 北之燕> 正文

Base PyQt4, Simple Web APP Framwork

简介:   长时间以来,一直针对Linux 服务器开发后台程序,每天面对的是黑框框,输出只有日志文件。偶尔需要模拟客户端测试,要么是写几行php代码,在浏览器上点一点,要么是写个小Python脚本在shell中执行一下。
+关注继续查看

  长时间以来,一直针对Linux 服务器开发后台程序,每天面对的是黑框框,输出只有日志文件。偶尔需要模拟客户端测试,要么是写几行php代码,在浏览器上点一点,要么是写个小Python脚本在shell中执行一下。写了一些测试用的小脚本以后,越来越钟爱这种脚本测试方式了。想到什么测试case,三下五除二改改脚本就能测了。测试小脚本多多少少也写了十来个了。其实自己Php和Python的底子都不好,只是略懂一二,居然大部分问题都能google一下轻松解决,主要是也不需要使用神马高级特性哈哈。

      最近的项目的测试却让我犯难了,要搞GUI程序!哥身为Linux服务器下C++程序员,向来不屑写GUI,也闲麻烦(也闲自己不太会哈哈)。我们开发了一个基于地图的游戏,现在一是要测试稳定性模拟N个用户随机的移动,二是测试服务器性能,当用户相对集中在地图上某个区域时,服务器的响应效率如何。这个是当前最主要的需求,我们需要搞一个GUI程序显示地图上所有人的移动。设计的方案是将整个地图缩小到只有一屏,把用户显示为一个红点,可以动态的增加用户,还可以实时显示服务器当前各个区域的负载图。除了这个需求外,以前也碰到过一些需要GUI工具的需求,如检查任务定义的excel,检查地图配置的xml的有效性等。这些目前都是通过Web或Flash帮忙做了,但其实这些工具最好是后台程序员维护,毕竟一些限制、检查后台开发是最清楚的。

     于是乎N年来第一次这么想写GUI程序,哥不搞则以,一搞惊人哈哈!即整就整一个通用点的吧!!整理需求如下:

  • 常用的工具程序一般要经常修改,So GUI工具程序一定要用脚本写
  • 使用工具的人大致为开发、策划、运维,知道她们都用神马系统吗?普通青年用window,文艺青年用Mac,二逼青年用Linux,So Gui工具还要跨平台
  • 世界上最容易编写的GUI是神马?我的答案是HTML,大学里尽JB写web了,要是能让哥能用HTML+JQuery,那效率绝对是杠杆的。但是如果直接写Php页面有一些缺陷,一是他不能长期运行,点一下运行一下,二是普通Html+Jquery是不能访问本地文件系统的,更不能自己发起socket连接到服务器。

    经过一二两条,剩下的就是Lua和python了,但是Lua库太少,果断排除。加上第三条,经过艰苦的google加demo测试剩下python +widget、 和 python + Qt。刚开始苦逼的选择了wxpython,普通HTML页面鼓捣几个小时就搞出来了,这时才悲剧的发现塔不支持CSS 和 Javascript,连表单都不支持,我自己给其扩展了一下好不容易支持按钮了,但是不支持javascript太让我不甘心了。So 果断丢弃代码。

    最后PyQt成为我最后的选择,稍微看了一下Qt库,就不禁感叹,这库太JB牛逼了,外国佬揍是牛逼,这么牛逼的库开源出来。Qt中包含了N多方面的封装,其中Webkit就是专门用来渲染HTML的,Chrome、Safari等都是基于webkit引擎渲染,怪不人家能有这么帅的浏览器,人家基础库搞的好,长期技术积累啊。咋没见国人搞神马渲染引擎。这真是造福人类的好东东。我一直认为最牛逼的软件就是QT、Webkit这样的,开发此软件的人牛逼,连使用这些软件的人都觉的能够使用这样牛逼的软件,觉得自己也牛逼。除qt,webkit外,还有mysql、Linux、memcache、gcc 。我见过N过精通Oracle的人牛逼哄哄的样子,Oracle的作者我没见过,应该是更牛逼哄哄吧。

    下面详述一下我的实现:主要基于window平台(注:目前是个普通青年)

1. 安装python

window 下载安装包,一路下一步即可,下载地址python.org,推荐下载python2.7 32位版本,推荐连接

python-2.7.1.zip

linux:yum/apt 一键安装

2. 安装pyqt4

win下下载相应的安装包,注意和python版本对应,推荐下载

PyQt-Py2.7-x86-gpl-4.9-1.exe Windows 32 bit installer

http://www.riverbankcomputing.co.uk/software/pyqt/download

linux yum/apt 或者下载tar包自己安装,二逼青年总是会麻烦一点。

3. 下载偶的示例代码:

svn co https://ffown.googlecode.com/svn/trunk/python

4. 运行

双击main.py即可运行,运行效果图如下,主要包括通过google下载图片的例子、jquery控制按钮例子,javascript通过python访问文件系统例子,url重定向例子,还有一个html5动画的例子。

 

 

5. 框架详解:

要用pyqt实现一个浏览器,最少只需如下几行代码:参见pylib/simple.py

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *

app = QApplication(sys.argv)

web = QWebView()
web.load(QUrl("http://www.cnblogs.com/zhiranok"))
web.show()

sys.exit(app.exec_())

我自己将PyQtWebkit封装到pylib下的ffqt.py

和上面不同的是1我封装了几个函数供Javascript调用。2我默认调用html目录下的index.html文本即可,若要修改GUI只需修改index.html文件即可。

class PythonJS(QObject):
    url = []
    __pyqtSignals__ = ("contentChanged(const QString &)")
    @pyqtSignature("", result="QString")
    def get_image_url(self):
        if len(self.url) == 0:
            search_url = 'http://ffown.sinaapp.com/get_image_url.php'
            search_ret = eval(urllib.urlopen(search_url).read())
            self.url = search_ret
        dest = self.url[random.randint(0, 100) % len(self.url)]
        return dest
    @pyqtSignature("QString", result="QString")
    def readfile(self, path):
	ret = ""
	try:
	    f = open(path, "r")
	    ret = f.read()
	    f.close()
	except:
		ret = "file not exist!" + path
		traceback.print_exc()
	return ret
    @pyqtSignature("QString", result="QString")
    def select_file(self, ext = "*"):
	ret = QFileDialog.getOpenFileName(None, "", ext, "FileDialog")
        return re

  这里PythonJS就是为javascript封装的扩展函数库,每个成员方法javascript都可以直接调用,如读取文件内容的readfile在javascript中调用方式为

python.readfile(file_path)

     这样javascript不方便做的如访问文件系统、socket连接、数据库访问等,都可以交个python来做。利用HTML加Jquery很容易写出一个很实用的GUI程序。

     please Try it,欢迎文艺青年、二逼青年、普通青年测试、报bug。

 

 

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
3996 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
2155 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7576 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9306 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
4962 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
5663 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
10711 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
707 0
+关注
北之燕
游戏服务器主程,热爱技术热爱生活,现在专注于开源游戏服务器框架。
46
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载