用 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_)
最终实现效果如下如所示:
用 Python 实现浪漫表白程序
文章图片
turtle画图
这里通过海龟画图绘制爱心和玫瑰 , 实现动态绘图效果 。 通过pensize函数定义画笔大小;speed定义速度;Color定义颜色;等等