PySide6/PyQT 之应用程序最小化到系统托盘 您所在的位置:网站首页 win7托盘图标隐藏 PySide6/PyQT 之应用程序最小化到系统托盘

PySide6/PyQT 之应用程序最小化到系统托盘

2023-07-06 08:07| 来源: 网络整理| 查看: 265

在这里插入图片描述

前言

在使用 PySide6/PyQT 时,应用程序默认只会在任务栏展示一个初始图标。很显然,这是不够人性化的。

而在使用微信时候,

按下键盘的Esc,就是隐藏窗口;按下键盘的快捷键 Ctrl + Alt + W就是显示或隐藏窗口;窗口隐藏时候可以去系统托盘找到它。

这个设计特性非常有意思。这样的设计可以让应用程序更加人性化、优雅,给用户带来更好的使用体验。

本文将介绍如何使用 PySide6/PyQT 将应用程序最小化到系统托盘,以及如何恢复应用程序。通过学习这篇文章,读者朋友们将了解如何实现这个功能,并为你的应用程序增添一项实用的设计特性。

什么是系统托盘

首先,需要了解什么是系统托盘。系统托盘是操作系统(如 Windows 和 macOS)中的一个特殊区域,用于存放最小化的应用程序图标。当你将应用程序最小化到系统托盘时,应用程序将不再显示在屏幕上,而是被移到系统托盘中。

案例展示

下面展示的动图中的项目是笔者使用 PySide6/PyQT 写的一个小工具,感兴趣的读者朋友们可以通过以下链接获取。

一个Python写的游戏辅助小工具。适用于 咸鱼之王后台挂机、鼠标连击等。

动图展示

在这里插入图片描述

可以看到(注意看键盘按键显示器),

当按下Esc 键时候,窗口隐藏到系统托盘;按下Ctrl + Alt + W 时候,窗口恢复;

完全达到本文标题所说的功能。!!!

实现

这里用到的知识点,主要就是 键盘监听:

键盘监听,因为需要根据按键去触发对应的事件;为系统托盘的应用添加 菜单选项;

关于键盘监听,这里不再赘述。有需要的读者朋友们请查阅这篇文章:Python键盘监听:实现快捷操作和自动化脚本(监听组合键

代码

实现将窗口最小化到系统托盘的功能。使用 PySide6/PyQT 库创建了一个简单的窗口,并在窗口中添加了一个按钮。当点击按钮时,窗口将被隐藏并最小化到系统托盘。同时,系统托盘图标上会显示一个菜单,包含"显示"和"退出"两个选项。

# encoding: utf-8 from PySide6.QtGui import QAction, QIcon, QKeySequence, QShortcut from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QMenu, QSystemTrayIcon class MyWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("最小化系统托盘") self.resize(400, 300) # 创建按钮并连接到最小化到系统托盘的方法 self.button = QPushButton("Minimize to Tray") self.button.clicked.connect(self.minimize_to_tray) self.setCentralWidget(self.button) # 初始化系统托盘相关的对象和菜单项 self._restore_action = QAction() self._quit_action = QAction() self._tray_icon_menu = QMenu() self.tray_icon = QSystemTrayIcon(self) self.tray_icon.setIcon(QIcon("trash.png")) # 替换为你的图标路径 self.tray_icon.setToolTip("My Application") self.create_actions() self.create_tray_icon() self.tray_icon.show() # 连接系统托盘图标的激活事件 self.tray_icon.activated.connect(self.tray_icon_activated) # 应用程序键盘监听 self.listen_keyboard() def minimize_to_tray(self): # 最小化窗口到系统托盘 self.hide() def restore_from_tray(self): # 还原窗口 if self.isMinimized(): self.showNormal() elif self.isMaximized(): self.showMaximized() else: self.show() def tray_icon_activated(self, reason): # 当系统托盘图标被点击时的处理 if reason == QSystemTrayIcon.ActivationReason.Trigger: # 如果点击的是触发事件(比如左键单击),则还原窗口 self.restore_from_tray() def create_actions(self): # 创建菜单项 self._restore_action = QAction("显示", self) self._restore_action.triggered.connect(self.restore_from_tray) # "显示"菜单项触发还原窗口的操作 self._quit_action = QAction("退出", self) self._quit_action.triggered.connect(QApplication.quit) # "退出"菜单项触发退出应用程序的操作 def create_tray_icon(self): # 创建系统托盘图标和上下文菜单 self._tray_icon_menu = QMenu(self) self._tray_icon_menu.addAction(self._restore_action) self._tray_icon_menu.addSeparator() self._tray_icon_menu.addAction(self._quit_action) self.tray_icon.setContextMenu(self._tray_icon_menu) self.tray_icon.show() def listen_keyboard(self): # 键盘监听 shortcut = QShortcut(QKeySequence("Esc"), self) # 当按下 Esc 键时隐藏窗口 shortcut.activated.connect(self.hide) if __name__ == "__main__": app = QApplication() app.setQuitOnLastWindowClosed(False) window = MyWindow() window.show() app.exec()

代码释义:

创建一个继承自 QMainWindow 的自定义窗口类 MyWindow。在 MyWindow 类的构造函数中进行初始化操作,包括设置窗口标题、大小和布局。创建一个 QPushButton 对象,用于实现最小化到系统托盘的功能,并将其与相应的槽函数 minimize_to_tray 连接。创建 QActions 对象,用于定义菜单项的动作。这里包括一个用于还原窗口的动作 _restore_action 和一个用于退出应用程序的动作 _quit_action。创建 QMenu 对象 _tray_icon_menu,用于组织菜单项。创建 QSystemTrayIcon 对象 tray_icon,用于管理系统托盘图标。设置图标和提示信息。在 MyWindow 类中定义了一些辅助函数,如 minimize_to_tray 用于最小化窗口到系统托盘,restore_from_tray 用于还原窗口,tray_icon_activated 用于处理系统托盘图标的激活事件。在 create_actions 函数中,将创建的动作对象添加到菜单中。在 create_tray_icon 函数中,将菜单设置为系统托盘图标的上下文菜单,并显示系统托盘图标。在应用程序的入口点中,创建 QApplication 对象,并设置 setQuitOnLastWindowClosed(False) 以确保在关闭最后一个窗口时不退出应用程序。

总体而言,这段代码实现了将窗口最小化到系统托盘,并提供了相应的菜单项和图标,方便用户操作和控制窗口的显示和退出。

总结🎈🎈

在这篇文章中,介绍了将 PySide6/PyQT 窗口最小化到系统托盘的功能。

使用QSystemTrayIcon类创建了一个系统托盘图标,并设置了一个上下文菜单,其中包含"显示"和"退出"菜单项。通过连接相应的槽函数,

实现了还原窗口和退出应用程序的操作。当点击按钮时,窗口会最小化到系统托盘,并显示一个系统通知。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有