QQ技术分享交流互助群
QQ群号:566341887 (大家一起互帮互助,共同进步,交流分享,奔赴未来!)
序
额,这一篇,嗯,挺费劲的,毕竟在学的时候,文章里面写法很多,看得也头大就是说不是很详细?写法也多……我也就只能一点一点摸索了。好了话不多说,开始吧。
一、回顾上一篇
嗯,差不多就是“打地基”,把代码放一下就过去了。
import os
import sys
from random import randint
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class dp(QWidget):
def __init__(self, parent=None, **kwargs):
super(dp, self).__init__(parent)
self.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint|Qt.SubWindow)
self.setAutoFillBackground(False)
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.repaint()
if __name__ == '__main__':
app = QApplication(sys.argv)
pet = dp()
sys.exit(app.exec_())
二、整理
这个吧,我感觉前面就是,这么写下来容易乱,然后也是用那种常用手段,类似于“树”。
1.结构
然后我们把前面的那些初始化统一放一个函数里面,然后不同的函数负责不同的功能,画个图就是这样……
能懂吧……
额实在不明白也没关系,咱继续好了,慢慢来不急。
2.初始化的函数
初始化,一般都是init,所以就这么简单的取名。
def init(self):
self.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint|Qt.SubWindow)
self.setAutoFillBackground(False)
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.repaint()
3.修改原有函数
然后我们把之前的删掉,然后调用一下这个新设的函数即可。
总的如下。
def __init__(self, parent=None, **kwargs):
super(dp, self).__init__(parent)
self.init()
def init(self):
self.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint|Qt.SubWindow)
self.setAutoFillBackground(False)
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.repaint()
这个整理一笔带过,不是今天的重点。
三、任务栏图标
1.重要性
之所以不先做桌宠的图片导入和动作啥的,是有原因的。
就是现在运行下来吧,大家的shell终端应该是这样的。
然后运行结束的话要点那个“×”,所以为了后面方便,而且这个做起来也简单些,所以我们先把这个做好。
2.思路
这个要怎么说呢, 咱们先不考虑别的昂,现在的目标是实现最基础最简单的功能——“退出”。
那么怎么个思路写法呢?
接下来,我就一个标题一个标题,详细地讲了。
3.退出函数
我们就定义一个函数quit,然后写两个功能:一个关闭一个退出。
这里就直接展示代码了。
def quit(self):
self.close()
sys.exit()
4.详细各步骤
(1)导入图片
首先啊,这个图片的大小我建议就是一般的话256*256,细致点1024*1024……虽然感觉这样不是很有必要。
这个导入就要用到os库里的os.path.join了,然后后面紧跟“()”,里面就是图片名称,注意层级。
ico=os.path.join("co.png")
(2)创建菜单项并实现退出
这个的话,我们要点击一个图标,点了之后会有选项,选项要有内容吧,点了这个选项之后要实现退出功能吧。
那要怎么搞呢?
一点一点来。
非常不建议写一段代码就运行一下,那样会报错可能,因为这个环环相扣,还是一次性写完再运行好点。
————
先设置一个有退出功能的项。“退出”是项的内容;最后那个self.quit是用来实现功能的,也就是调用我们上面的函数。
quit_action = QAction('退出', self, triggered=self.quit)
————
然后我们新建一个菜单控制栏
self.tray_icon_menu = QMenu(self)
————
加入上面设置好的这个项。
self.tray_icon_menu.addAction(quit_action)
(别急着运行,因为少一个展示功能,所以运行了也看不到具体效果)
(3)托盘上操作
在底下这个托盘里面,增加一个图标,并且导入这个图片,和一些基础的操作。(我这一次性展示掉了)
self.tray_icon=QSystemTrayIcon(self)
self.tray_icon.setIcon(QIcon(ico))
self.tray_icon.setContextMenu(self.tray_icon_menu)
(4)显示
最后展示,就是把这个内容显示出来。
self.tray_icon.show()
5.拓展
其实这个拓展就点个思路,就是从上面也能看到,通过这个按设置好的项,然后它里面连了另外一个函数,就是利用好这个点,去实现更多功能。
四、总结
额,就是这个桌宠吧,我看那些文章都是一篇框框直接结束了,然后我想的就是尽可能详细一点,一点一点来,然后能让大伙就是都看得懂,哪怕是萌新。
(真的不加群问问题,讨论啥的嘛)