用 Python 实现浪漫表白程序( 二 )
1、时间变量初始化
2、调用随时间图案变化函数
3、窗口位置和边框初始化
4、计时器初始化 。
5、鼠标跟踪定义
1.2透明窗口的定义
初始化中加入self.setAttribute(Qt.WA_TranslucentBackground)实现背景透明效果 。
1.3不规则窗口函数的建立
主要使用Qt.AvoidDither|Qt.ThresholdAlphaDither|Qt.ThresholdDither参数实现不规则窗口 。 同时还需要规定不规则窗口尺寸等等 , 主要定义函数mypix进行调用
1.4鼠标设置
可通过初始化self.setMouseTracking(False)设置鼠标移动跟踪是否有效 。 设置为True时 , 只要鼠标在窗口内移动时mouseMoveEvent事件就能捕获
设置为False时(默认) , 只有鼠标键按下并在窗口内移动时mouseMoveEvent事件才能捕获
注意只能是QWidget , 如果是QMainwindow , 则无效
self.hasMouseTracking返回设置的状态
1.5创建多线程时间变化
定义时间变化函数 , 一个线程用来更新动画 , 另一个用来更新对话框 。
1.6对话框函数定义
如果鼠标触碰到宠物的话就弹出对话 。
其中部分代码如下:def__init__(self):super(DemoWin,self).__init__self.initUI#初始化 , 不规则窗口self.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint|Qt.SubWindow)self.setAutoFillBackground(False)self.setAttribute(Qt.WA_TranslucentBackground,True)self.repaint#是否跟随鼠标self.is_follow_mouse=Falseself.move(1650,20)withopen("data.txt","r")asf:text=f.readself.sentence=text.split("n")
2、鼠标控制
2.1鼠标点击事件
鼠标点击icon传递的信号会带有一个整形的值 , 1是表示单击右键 , 2是双击 , 3是单击左键 。
2.2鼠标按下调用
通过n=event.button用来判断是哪个鼠标健触发了事件【返回值:0124】 。
其中:QtCore.Qt.NoButton-0-没有按下鼠标键QtCore.Qt.LeftButton-1-按下鼠标左键QtCore.Qt.RightButton-2-按下鼠标右键QtCore.Qt.Mion或QtCore.Qt.MiddleButton-4-按下鼠标中键
通过nn=event.buttons返回前面所列枚举值的组合 , 用于判断同时按下了哪些键
2.3鼠标松开
定义函数mouseReleaseEvent , 鼠标键释放时调用参数1:鼠标的作用对象;参数2:鼠标事件对象 , 用来保存鼠标数据 。
2.4鼠标拖动事件
定义函数mouseMoveEvent通过self.hasMouseTracking获取移动值 。 然后获得鼠标坐标 。 控制窗口随之移动
2.5鼠标移出和滚轮事件
鼠标移出定义函数leaveEvent , 滚轮wheelEvent 。
2.6鼠标右键事件
鼠标移出定义函数contextMenuEvent , 在右键菜单里通过cmenu.addAction加入标签 。 action=cmenu.exec_(self.mapToGlobal(e.pos))获取鼠标点击标签 , 用来判断用户点击了哪一个标签 。
其中部分代码如下:#当按右键的时候 , 这个event会被触发defcontextMenuEvent(self,event):menu=QMenu(self)video=menu.addAction("浪漫程序")quitAction=menu.addAction("退出")action=menu.exec_(self.mapToGlobal(event.pos))ifaction==quitAction:qApp.quitifaction==video:importthreadingdeft2:os.system("python1.py")t22=threading.Thread(target=t2)t22.start
3、动态宠物控制
3.1根据事件的动作判定
这里定义点击等动作自动回馈等等 。
3.2宠物图片更换
定义列表用来存储素材关系 。
3.3程序退出事件
通过quit函数控制退出defquit(self):self.closesys.exit
3.4整体执行
从main入口开始执行整体类if__name__=='__main__':app=QApplication(sys.argv)app.setWindowIcon(QIcon("1.jpg"))#创建一个主窗口mainWin=DemoWin#显示mainWin.show#主循环sys.exit(app.exec_)
最终实现效果如下如所示:
文章图片
turtle画图
这里通过海龟画图绘制爱心和玫瑰 , 实现动态绘图效果 。 通过pensize函数定义画笔大小;speed定义速度;Color定义颜色;等等
- Minitab 免费试用安装说明
- 比尔·盖茨|坐拥千亿的前世界首富,却不肯用苹果手机,只用韩国的三星手机
- 21岁女大学生深陷网赌,欠下网贷50万,如今用“特殊方式”偿还!
- 电池|一加11用库存屏幕惹争议,为什么很多人在意低频PWM调光?
- React全栈式开发 | Spring Boot应用开发
- 本文转自:中国科学报化学反应研究不再像“抽盲盒”科学家实现对氢分子的立体动力学精准调控研...|化学反应研究不再像“抽盲盒”
- 90后做京喜无货源,2个月做到单店8000,只用了“信息差”赚差价
- 本文转自:人民网人民网北京1月18日电 (记者孙红丽)据国家药监局官网消息|保障供应 国家药监局批准10个医用氧产品上市
- 本文转自:中国绿色时报人工智能技术与生态学大数据分析方法应用于鸟类多样性智慧监测|人工智能如何进行“鸟口普查”?
- 51信用卡举大刀割韭菜,2020 DEMO CHINA创投峰会开幕!