龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > python编程 >

用Python实现QQ游戏大家来找茬辅助工具(3)

时间:2014-09-15 02:48来源:网络整理 作者:网络 点击:
分享到:
这里我没有替换变量,太麻烦了,能看清楚算法就行。 让PyQt程序在任务栏隐藏 为了让PyQt程序不出现在任务栏,构造QWidget设置了这些属性 self.setWindowFla


这里我没有替换变量,太麻烦了,能看清楚算法就行。
让PyQt程序在任务栏隐藏
为了让PyQt程序不出现在任务栏,构造QWidget设置了这些属性

self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Popup | Qt.Tool)


让PyQt程序加入系统托盘、资源文件使用
PyQt添加托盘菜单非常容易,几行代码就可以

创建托盘 self.icon = QIcon(":\icon.png")
 self.trayIcon = QSystemTrayIcon(self) self.trayIcon.setIcon(self.icon) self.trayIcon.setToolTip(u"QQ找茬助手") self.trayIcon.show()
 # 托盘气泡消息 self.trayIcon.showMessage(u"QQ找茬助手", u"QQ找茬助手已经待命,进入游戏即可激活")
 # 托盘菜单 self.action = QAction(u"退出QQ找茬助手", self, triggered = sys.exit) # 触发点击后调用sys.exit()命令,即退出 self.menu = QMenu(self) self.menu.addAction(self.action) self.trayIcon.setContextMenu(self.menu)

最初我是用的托盘图标是一个.ico文件,执行脚本可以正常显示,但打包成exe后执行在托盘上显示为一个空白图标,用Python的idle工具编译运行也是空白。尝试多次后发现:PyQt的托盘图标不能使用.ico文件,否则会显示空白,换成png格式素材就没问题!
PyQt资源文件打包
Qt使用一个.qrc格式的xml文件管理素材,代码用可用:\xxx\xxx.png的方式引用资源文件中的素材,这在PyQt中同样支持。
这里我创建了一个resources.qrc文件

<!DOCTYPE RCC> <RCC version="1.0"> <qresource> <file>icon.png</file> </qresource> </RCC>


然后用

pyrcc4 resources.qrc > resources.py


命令,将资源文件转成一个python模块,在代码中import resources,则可以用这样的方式使用图像素材

self.icon = QIcon(":\icon.png")


打包成可执行程序
这个工具是给别人用的,肯定不能以py脚本的形式发布,我使用了cx_Freeze来打包为可执行程序。
为此要写一个打包命令脚本convert2exe.py

#!Python #coding=gbk  # python转exe脚本 # # 安装cx_Freeze # 执行 python convert2exe.py build # 将自动生成build目录, 其下所有文件都必须打包 #  import sys from cx_Freeze import setup, Executable
 
base = None if sys.platform == "win32":
  base = "Win32GUI" 
buildOptions = dict(
  compressed = True)
 
setup(
    name = "ZhaoChaAssistant", version = "1.0", description = "ZhaoChaAssistant", options = dict(build_exe = buildOptions), executables = [Executable("zhaochaassistant.py", base = base, icon = "icon.ico")])


最后执行一个命令

python convert2exe.py build

则会在当前路径下创建个build目录,打包的程序就在其中一个exe.win-amd64-2.7的目录中,运行exe即可执行,与Python无二。可惜这个包太大了一些,整个目录达到了30M。

为了让exe程序也有一个好看的图标,在最后一行中的executables参数中指定了icon = "icon.ico",这个图标就最好使用多页的.ico格式(16x16,32x32,48x48...),让程序在各种显示环境下(桌面、文件夹)都有原生的显示。

如果打包的时候必须使用独立的资源,可在buildOptions字典参数中增加一条include_files = ['xxx.dat']配置,这样在打包时会将python脚本目录中的xxx.dat文件拷贝到exe目录中,不写的话就得人工拷贝了。

小技巧:Python获得自己的绝对路径
Python中有个魔术变量可以得到脚本自身的名称,但转换成exe后该变量失效,这时得改用sys.executable获得可执行程序的名称,可用hasattr(sys, "frozen")判断自己是否已被打包,下面是一个方便取绝对路径的函数:
import sys   def module_path(): if hasattr(sys, "frozen"): return os.path.dirname(os.path.abspath(unicode(sys.executable, sys.getfilesystemencoding()))) return os.path.dirname(os.path.abspath(unicode(__file__, sys.getfilesystemencoding())))

结束语

Python可能是程序员最好的玩具,什么都能粘起来,日常写点小工具再合适不过了。
文中的第三方模块都可以Google获得下载地址,有些库没有Win7 64位的原始版本(比如PIL),但可到
http://www.lfd.uci.edu/~gohlke/pythonlibs/
下载别人编译好的,也很方便。

收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!
按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接