【pyqt5学习】——窗口最小化至托盘、取消任务栏图标

目录

1、最小化至托盘

1)重写系统托盘类,设置托盘图标等属性

2)将具体的窗口放入托盘

2、取消任务栏界面图标

3、问题汇总

1)退出后托盘图标还是存在,没有消失

2)最小化后左下角会出现 窗口

3)创建快捷方式后运行软件无图标


1、最小化至托盘

pyqt5 窗口最小化到windows托盘_Marvin_Xavier的博客-CSDN博客_pyqt5 最小化到托盘pyqt5创建的程序一般是默认可以最小化到任务栏的,这也是一般程序都会有的功能。平时我们使用的有些程序也会最小化到任务栏旁边的托盘上,就是在时间日期旁边的小图标,这个需要额外在pyqt5中写点代码设置下了。首先我们创建一个demo程序,这个程序就是创建一个窗口,窗口中有一个按钮和textBrowser,按下按钮后可以在textBrowser中写一个helloworld如果不知道在vscode下如何开发puqt5,可以参看下这个https://blog.csdn.net/marwenx/arthttps://blog.csdn.net/marwenx/article/details/107200049

1)重写系统托盘类,设置托盘图标等属性

具有以下功能:

鼠标右键点击托盘图标,会有三个功能的菜单栏(启动、显示通知、退出)

from PyQt5 import QtWidgets,QtCore,QtGui
import ospath = os.path.abspath(__file__)
filePath = os.path.dirname(path)class TrayIcon(QtWidgets.QSystemTrayIcon):def __init__(self, MainWindow, parent=None):super(TrayIcon, self).__init__(parent)self.ui = MainWindowself.createMenu()def createMenu(self):self.menu = QtWidgets.QMenu()self.showAction1 = QtWidgets.QAction("启动", self, triggered=self.show_window)self.showAction2 = QtWidgets.QAction("显示通知", self, triggered=self.showMsg)self.quitAction = QtWidgets.QAction("退出", self, triggered=self.quit)self.menu.addAction(self.showAction1)self.menu.addAction(self.showAction2)self.menu.addAction(self.quitAction)self.setContextMenu(self.menu)# 设置图标self.setIcon(QtGui.QIcon(filePath+"/resources/icon.jpg"))self.icon = self.MessageIcon()# 把鼠标点击图标的信号和槽连接self.activated.connect(self.onIconClicked)def showMsg(self):self.showMessage("喝水提醒小工具", "点击退出", self.icon)def show_window(self):# 若是最小化,则先正常显示窗口,再变为活动窗口(暂时显示在最前面)self.ui.showNormal()self.ui.activateWindow()def quit(self):QtWidgets.qApp.quit()# 鼠标点击icon传递的信号会带有一个整形的值,1是表示单击右键,2是双击,3是单击左键,4是用鼠标中键点击def onIconClicked(self, reason):if reason == 2 or reason == 3:self.showMessage("喝水提醒小工具", "点击退出", self.icon)if self.ui.isMinimized() or not self.ui.isVisible():# 若是最小化,则先正常显示窗口,再变为活动窗口(暂时显示在最前面)self.ui.showNormal()self.ui.activateWindow()self.ui.setWindowFlags(QtCore.Qt.Window)self.ui.show()else:# 若不是最小化,则最小化self.ui.showMinimized()self.ui.setWindowFlags(QtCore.Qt.SplashScreen)self.ui.show()

2)将具体的窗口放入托盘

   tray = TrayIcon(main_)
   tray.show()

完整代码 

from main import Ui_MainWindow as Main_Ui # 导入利用Qt设计的界面代码
from Tray import TrayIconfrom PyQt5.QtWidgets import QMessageBox,QMainWindow,QApplication
from PyQt5 import QtCore
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlotimport sys,psutil,os,datetime,pyttsx3,timepath = os.path.abspath(__file__)
filePath = os.path.dirname(path)# 逻辑代码
class main_logic(QMainWindow,Main_Ui):def __init__(self):super(main_logic, self).__init__()self.setupUi(self)if __name__ == '__main__':app = QApplication(sys.argv)main_ = main_logic()main_.showMinimized()tray = TrayIcon(main_)tray.show()sys.exit(app.exec_())

2、取消任务栏界面图标

最小化的时候如果只是按照上面进行的话,最小化到托盘后,任务栏也会有图标,这时候通过设置窗口属性可以取消任务栏图标

不足是会导致最小化等按钮没有,需要通过自定义按钮或者动作(action)来实现这些功能

 这里我是通过工具栏和action重写了最小化关闭按钮

pyqt5 隐藏任务栏图标_Marvin_Xavier的博客-CSDN博客_pyqt隐藏任务栏pyqt5中隐藏任务栏图标很简单,只需要一行代码即可。MainWindow.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.FramelessWindowHint)首先还是先了解下pyqt的窗口风格的设置setWindowFlags(Qt.WindowFlags)函数,Qt.WindowFlags类如下:1.窗口类型QtCore.Qt.Widget#插件默认窗口,有最小化、最大化、关闭按钮QtCore.Qt.Window#https://blog.csdn.net/marwenx/article/details/107226153

MainWindow.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.FramelessWindowHint)
setWindowFlags(Qt.WindowFlags)函数,Qt.WindowFlags类如下:1.窗口类型QtCore.Qt.Widget
#插件默认窗口,有最小化、最大化、关闭按钮QtCore.Qt.Window
#普通窗口,有最小化、最大化、关闭按钮QtCore.Qt.Dialog
#对话框窗口,有问号和关闭按钮QtCore.Qt.Popup
#弹出窗口,窗口无边框化QtCore.Qt.ToolTip
#提示窗口,窗口无边框化,无任务栏窗口QtCore.Qt.SplashScreen
#飞溅屏幕,窗口无边框化,无任务栏窗口QtCore.Qt.SubWindow
#子窗口,窗口无按钮但有标题栏2.使用自定义外观的顶层窗口标志QtCore.Qt.MSWindowsFixedSizeDialogHint
#窗口无法调整大小QtCore.Qt.FramelessWindowHint
#窗口无边框化QtCore.Qt.CustomizeWindowHint
#有边框但无标题栏和按钮,不能移动和拖动QtCore.Qt.WindowTitleHint
#添加标题栏和一个关闭按钮QtCore.Qt.WindowSystemMenuHint
#添加系统目录和一个关闭按钮QtCore.Qt.WindowMaximizeButtonHint
#激活最大化和关闭按钮,禁止最小化按钮QtCore.Qt.WindowMinimizeButtonHint
#激活最小化和关闭按钮,禁止最大化按钮QtCore.Qt.WindowMinMaxButtonsHint
#激活最小化、最大化和关闭按钮,
#相当于QtCore.Qt.WindowMaximizeButtonHint|QtCore.Qt.WindowMinimizeButtonHintQtCore.Qt.WindowCloseButtonHint
#添加一个关闭按钮QtCore.Qt.WindowContextHelpButtonHint
#添加问号和关闭按钮,像对话框一样QtCore.Qt.WindowStaysOnTopHint
#窗口始终处于顶层位置QtCore.Qt.WindowStaysOnBottomHint
#窗口始终处于底层位置

 

3、问题汇总

pyqt5 关闭程序显示提示信息+最小化程序到托盘+隐藏任务栏图标_Marvin_Xavier的博客-CSDN博客_pyqt5 最小化到托盘这个程序主要完成几个目的:1. 主窗口控件最小化等操作后正常可用(点击按钮会在textBrowser中加入一行hello world);2. 点击右上角x键可以显示提示信息且按钮功能正常(退出程序或者最小化到托盘);3. 最小化到托盘后实现两个功能(左键单击显示或隐藏主界面,右键显示显示选线可以关闭或者显示主界面,);1. 首先用designer新建了一个demo,这个demo上只有两个控件,一个是textBrowser,一个是pushButton,直接从designer侧边拖.https://blog.csdn.net/marwenx/article/details/107226987

1)退出后托盘图标还是存在,没有消失

加上一句,在退出前,先将托盘图标设置为不可见

# 函数功能:退出程序def quit(self):self.setVisible(False)  # 托盘图标会自动消失QtWidgets.qApp.quit()

2)最小化后左下角会出现 窗口

def onIconClicked(self, reason):if reason == 2 or reason == 3:# self.showMessage("Message", "skr at here", self.icon)if self.ui.isMinimized() or not self.ui.isVisible():#若是最小化,则先正常显示窗口,再变为活动窗口(暂时显示在最前面)self.ui.showNormal()self.ui.activateWindow()self.ui.setWindowFlags(QtCore.Qt.Window)self.ui.show()else:#若不是最小化,则最小化self.ui.showMinimized()self.ui.setWindowFlags(QtCore.Qt.SplashScreen)self.ui.show()# self.ui.show()

 修改为:

def onIconClicked(self, reason):if reason == 2 or reason == 3:# self.showMessage("Message", "skr at here", self.icon)if self.ui.isMinimized() or not self.ui.isVisible():#若是最小化,则先正常显示窗口,再变为活动窗口(暂时显示在最前面)self.ui.showNormal()self.ui.activateWindow()self.ui.setWindowFlags(QtCore.Qt.Window)self.ui.show()else:self.ui.close()

通过托盘图标双击启动后再点击关闭后左下角就消失了 

3)创建快捷方式后运行软件无图标

有时候图标我们用的是相对路径,在创建快捷方式的时候会出错,我们利用绝对路径

path = os.path.abspath(__file__)
filePath = os.path.dirname(path)
self.setIcon(QtGui.QIcon(filePath+"/resources/icon.jpg"))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 是怎样炼成的

本文主要讲述 React 的诞生过程和优化思路。 内容整理自 2014 年的 OSCON - React Architecture by vjeux,虽然从今天(2018)来看可能会有点历史感,但仍然值得学习了解。以史为鉴,从中也可以管窥 Facebook 优秀的工程管…

【pyqt5学习】——重写窗口右上角关闭事件closeEvent()

目录 1、法一:设置中文按钮 2、法二:不设置中文按钮 pyqt5 关闭按钮显示提示信息_Marvin_Xavier的博客-CSDN博客_pyqt 关闭按钮https://blog.csdn.net/marwenx/article/details/107226531 1、法一:设置中文按钮 def closeEvent(self, even…

【pyqt5学习】——日历控件calendarWidget设置单元格格式(前景、背景)、日历控件属性编辑

目录 0、导入库 1、返回日历选中的日期 2、更改日历控件周几(比如一个月属于周一的日期)的所有格子属性 3、更改日历控件单个格子(指定日期)属性 4、日历格子属性 5、信号——clicked() 6、成果展示 0、导入库 from PyQt5.Q…

linux内核数据结构之链表

1、前言 最近写代码需用到链表结构,正好公共库有关于链表的。第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域。后来看代码注释发现该代码来自linux内核,在linux源…

【bug修复】you must feed a value for placeholder tensor ‘Placeholder‘ with dtype float解决方案

最近碰到了这个you must feed a value for placeholder tensor Placeholder with dtype float and shape的问题,字面意思很好理解,就是没有给Placeholder赋值,可是我明明赋值了,百度了许多,也都是让我检查是否赋值以及…

动态代理3之代理工厂实现

动态代理的深化:承接动态代理2( 对 上级实例进行 深化),也就是 spring 的前身 (必须掌握)实例: 文件说明:1.有一个Waiter接口,该接口有一个 server() 、ShouQian()方法 2.有一个 Waiter接口的实…

【bug修复】解决ValueError: Tensor(“Variable:0“ dtype=float32_ref) must be from the same graph as Tensor(“R

bug:描述 在进行tensorflow进行搭建CNN网络时,在定义CNN的py文件中调用cnn模型,运行正常,但是在其他py文件中进行时就出现问题 ValueError: Tensor(“Variable:0” dtypefloat32_ref) must be from the same graph as Tensor(“Reshape:0”,…

Linux 图片传输功能c/c++(初版)

由于深度学习任务的需要,要在程序里面嵌入一个module。 这个module 的功能是接收来自ios客户端的图片。并且传送给深度学习分类器进行处理。 于是看了看各种各样的 module 实现方案。 先是用IO函数把图片以数组的方式存起来。 再和服务器建立连接,socket…

Val编程-val系列编程思想

利用Val语言可以编写出各种各样的应用程序。正如windows phone面临的窘境一样,受众太小,市场不大。应用程序不多,所以也谈不上成熟。国内的应用程序基本上就是简单的小程序,谈不上什么编程思想。国外许多都是基于kernel的而衍生出…

【pyqt5学习】——bug修复,利用qt资源库qrc文件进行背景图像设置,不显示图像

目录 bug描述 bug分析 bug解决 bug描述 利用下面文章的方法进行资源设置后,有的显示了有的没有显示 【pyqt5学习】——pyqt5中.qrc资源文件的创建与编写_有情怀的机械男的博客-CSDN博客_python qrc目录一、说明二、安装pyqt5以及相关工具(pyqt5、pyuic…

Datalore:用于机器学习可视化的新Web方案!

前不久,JetBrains团队发布了Datalore,这是一款基于云的web应用程序,用于构建机器学习模型并在Python中创建丰富的可视化。最新的测试版本旨在简化构建机器学习模型的流程,并帮助开发人员进行数据分析。由于Datalore的智能编码辅助…

CSS魔法堂:重拾Border之——图片作边框

前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-top-left/right-radius的水平半径之和大于元素宽度时,实际值会…

共享内存简介和mmap 函数

一、共享内存简介 共享内存区是最快的IPC形式,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。 即每个进程地址空间都有一个共享存储器的映射区,当这块区域都映射到相同的真正的物理地址空…

【pyqt5学习】——QToolTip,QLabel控件,伙伴关系

目录 0、学习资源 1、给控件设置提示信息——QToolTip 2、QLabel控件(显示图像、设置超链接、信号绑定) 3、QLabel伙伴关系 1)代码 2)效果 3)知识点addWidget 0、学习资源 PyQt5教程,来自网易云课堂…

SylixOS中select原理及使用分析

2019独角兽企业重金招聘Python工程师标准>>> 1. select接口简介 1.1 select接口使用用例 select是操作系统多路I/O复用技术实现的方式之一。 多路I/O复用技术大致使用场景为:构造一张感兴趣的文件描述符列表,然后调用多路复用的IO接口&#x…

【pyqt5学习】——QLineEdit学习(回显模式)

目录 1、回显模式 2、成果显示 3、知识点 1)FormLayout布局添加addRow方法 2)在输入框显示灰色提示字体,输入内容时消失setPlaceholderText 3)设置回显模式setEchoMode 4、完整代码 1、回显模式 QLineEdit控件的主要功能是输…

【pyqt5学习】——QLineEdit控件输入校验器Validator、掩码setInputMask限制输入、textChanged信号

目录 1、输入校验器——限制输入框输入的内容 1)校验器类型——整数、浮点数、数字字母结合(正则) 2)步骤 3)结果 ​编辑 ​编辑 4)完整代码 2、利用掩码进行输入的限制 0)掩码对照表 1…

PyOpenCL图像处理:Box模糊

为什么80%的码农都做不了架构师?>>> # -*- coding: utf-8 -*-from __future__ import absolute_import, print_function import numpy as np import pyopencl as cl import cv2 from PIL import Imagedef RoundUp(groupSize, globalSize): r globalSi…

MySQL日志分类及性能分析你应该知道的知识

为什么80%的码农都做不了架构师?>>> MySQL日志记录了MySQL数据库日常操作和错误信息,MySQL总共有四种类型的日志,通过分析这些日志可以查询到MySQL的运行情况、用户操作、错误信息等,可以为MySQL的管理和优化提供必要…

android基础组件----Button的使用

按钮由文本或图标(或文本和一个图标)组成,当用户触摸到它时,会发生一些动作。今天我们开始Button的学习。少年的爱情永远不够用,一杯酒足以了却一件心事。 Button的简要说明 根据你是否想要一个带有文本的按钮&#xf…