python实现图片找不同游戏_用Python实现QQ游戏大家来找茬辅助工具

news/2024/11/14 18:09:04/

ef paintEvent(self, event): # 重置遮罩图像 self.pixmap.fill()

# 创建绘制用的QPainter,笔画粗细为2像素 # 事先已经在Qt窗体上铺了一个蓝色的背景图片,因此投过遮罩图案看下去标记线条是蓝色的 p = QPainter(self.pixmap)

p.setPen(QPen(QBrush(QColor(0, 0, 0)), 2))

for row in xrange(len(self.result)): for col in xrange(len(self.result[0])): if self.result[row][col] != 0: # 定一个基点,避免算数太难看 base_l_x = self.ANCHOR_LEFT_X + self.CLIP_WIDTH * col

base_r_x = self.ANCHOR_RIGHT_X + self.CLIP_WIDTH * col

base_y = self.ANCHOR_Y + self.CLIP_HEIGHT * row

if row == 0 or self.result[row - 1][col] == 0: # 如果是第一行,或者上面的格子为空,画一条上边 p.drawLine(base_l_x, base_y, base_l_x + self.CLIP_WIDTH, base_y)

p.drawLine(base_r_x, base_y, base_r_x + self.CLIP_WIDTH, base_y) if row == len(self.result) - 1 or self.result[row + 1][col] == 0: # 如果是最后一行,或者下面的格子为空,画一条下边 p.drawLine(base_l_x, base_y + self.CLIP_HEIGHT, base_l_x + self.CLIP_WIDTH, base_y + self.CLIP_HEIGHT)

p.drawLine(base_r_x, base_y + self.CLIP_HEIGHT, base_r_x + self.CLIP_WIDTH, base_y + self.CLIP_HEIGHT) if col == 0 or self.result[row][col - 1] == 0: # 如果是第一列,或者左边的格子为空,画一条左边 p.drawLine(base_l_x, base_y, base_l_x, base_y + self.CLIP_HEIGHT)

p.drawLine(base_r_x, base_y, base_r_x, base_y + self.CLIP_HEIGHT) if col == len(self.result[0]) - 1 or self.result[row][col + 1] == 0: # 如果是第一列,或者右边的格子为空,画一条右边 p.drawLine(base_l_x + self.CLIP_WIDTH, base_y, base_l_x + self.CLIP_WIDTH, base_y + self.CLIP_HEIGHT)

p.drawLine(base_r_x + self.CLIP_WIDTH, base_y, base_r_x + self.CLIP_WIDTH, base_y + self.CLIP_HEIGHT)

# 在遮罩上绘制按钮区域,避免按钮被遮罩挡住看不见 p.fillRect(self.btn_compare.geometry(), QBrush(QColor(0, 0, 0)))

p.fillRect(self.btn_toggle.geometry(), QBrush(QColor(0, 0, 0)))

# 将遮罩图像作为遮罩 self.setMask(QBitmap(self.pixmap))

这里我没有替换变量,太麻烦了,能看清楚算法就行。

让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文件

icon.png

然后用

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/

下载别人编译好的,也很方便。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

相关文章

相关视频

网友评论

文明上网理性发言,请遵守 新闻评论服务协议我要评论

立即提交

专题推荐独孤九贱-php全栈开发教程

全栈 100W+

主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门

玉女心经-web前端开发教程

入门 50W+

主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门

天龙八部-实战开发教程

实战 80W+

主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习

php中文网:公益在线php培训,帮助PHP学习者快速成长!

Copyright 2014-2020 https://www.php.cn/ All Rights Reserved | 苏ICP备2020058653号-1

  


http://www.ppmy.cn/news/596386.html

相关文章

【软考网络管理员】2023年软考网管初级常见知识考点(23)- 路由器的配置

涉及知识点 华为路由器的配置,华为路由器命令大全,软考大纲路由命令,静态路由和动态路由的配置命令,软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 原创于:CSDN博主-…

python制作QQ游戏--大家来找茬游戏辅助(一)

"大家来找茬"是我小时候在家里家里人都喜欢玩的一款休闲游戏,因为这游戏可以考验人的眼力和反应能力才不是因为电脑垃圾玩不了其他大作游戏(╯‵□′)╯︵┻━┻ 最近了解到了一个特别牛逼的python第三方库———pywin32库,这个库是超级牛逼&a…

Unity 3D游戏-见缝插针源码

Unity见缝插针功能实现 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) 1 Sphere Rotation ——控制球体旋转 2 Shoot Pin ——射…

大家来找茬游戏——经典益智游戏制作方法手稿

大家来找茬游戏,这个游戏估计做起来最简单了。 制作步骤是,先弄到一张图片,可以是数码照片,然后Photoshop上。 Photoshop用在这里有两个功能最常用,一是抠图,一是替换颜色。抠图需要用到钢笔路径工具&…

使用AxureRP7.0制作经典小游戏"大家来找茬"

本案例是《网站蓝图AxureRP7.0从入门到精通视频教程》中的最后一节,适用于对Axure基础知识掌握比较熟练的同学;教程由axure原型库网站录制,转载请注明出处!相信很多刚接触Axure或者学习了一段时间但并没有深入的同学们&#xff0c…

3D游戏作业5

前言 本文为3D游戏编程与设计课程的作业5——鼠标打飞碟游戏(Hit UFO) 一、任务要求 1.游戏有n个round,每个round都包括10次trial; 2.每个trial的飞碟的色彩、大小、发射位置、速度、角度、同时出现的个数都可能不同。它们由该round的rul…

html5游戏开发实战-----大家来找茬

相信很多人都玩过大家来找茬,美女找茬之类的游戏,其实利用tangide我们也可以轻松开发出我们自己的找茬游戏. tangide轻松实现了我们开发游戏简单,快捷的梦想,但是,不管是开发哪一类游戏,我们首先需要做的就是程序设计,我们拿到一个游戏的开发,不要一拿到手就马上啪啪啪的写代码…

3D游戏作业2

前言 本篇为3D游戏课程第二次作业。 一、简答题 1. 解释游戏对象和资源的区别和联系。 游戏对象(GameObjects)是游戏程序空间中的事物,可能是Empty、2D、3D、光线、摄像机等,指的是一个能够容纳实现实际功能的组件。 游戏资源…