您的位置 首页 > 数码极客

pb如何最小化到托盘

应用最小化到托盘

现代操作系统通常在桌面上提供一个特殊区域,称为系统托盘或通知区域。对一个GUI程序,如果在最小化时,程序做任务栏消失或者点击关闭按钮时,应用并不关闭,而是在系统托盘上显示一个图标,来表示该程序仍在运行,在托盘上打开上下文菜单,可以恢复程序正常显示,或者完全退出应用等操作。

要实现一个具有最小化到托盘功能的程序,要使用到类QSystemTrayIcon。该类为操作系统托盘的类,通过QSystemTrayIcon,可以在托盘上显示指定程序的图标,响应用户鼠标操作,显示指定消失,显示菜单等。

QSystenTrayIcon的常用函数有:

  • setIcon(self, icon:QIcon):设置程序在系统托盘上显示的图标。
  • setToolTip((self, tip: str): 设置鼠标放到图标上的提示文字。
  • setContextMenu(self, menu: QMenu): 设置上下文菜单,在托盘图标上点击鼠标右键时,将弹出该菜单。
  • show(self): 显示系统托盘图标。
  • hide(self): 隐藏系统托盘图标。
  • isSystemTrayAvailable(): 静态函数,判断系统是否支持托盘功能。
  • showMessage(self, title: str, msg: str, icon: 'QSy;, msecs: int):

showMessage(self, title: str, msg: str, icon: QIcon, msecs: int):

显示状态通知消息(气球信息),参数title为标题信息,msg为要显示的信息,icon为气球信息中显示的图标, msecs为显示持续时间,单位为毫秒。

QSystenTrayIcon的常用消息:

  • messageClicked(self):用户单击使用showMessage()显示的消息时,将发出此信号。
  • activated(self, reason: 'QSy;) :用户激活系统任务栏图标时,将发出此信号。reason指定激活的原因。

枚举变量QSy:

  • QSy (0): 不显示图标。
  • QSystemTrayIcon. Information (1): 显示信息图标。
  • QSy (2): 显示告警图标。
  • QSystemTrayIcon::Critical (3): 显示致命错误图标。

枚举变量 QSy:

  • QSy (0): 未知原因。
  • QSy (1): 请求系统托盘的上下文菜单。
  • QSy (2): 鼠标双击。
  • QSy (3): 鼠标单击。
  • QSy (4): 点击鼠标中键

测试

测试程序以pyqt5-examples/deskto为基础,演示对气球消息的控制设置,以及最小化到托盘后,如何通过菜单将程序恢复到常规状态和退出程序。完整代码如下:

import sys from PyQ import QIcon from PyQ import (QApplication, QDialog, QMessageBox, QPushButton,                              QLabel, QCheckBox, QComboBox, QLineEdit, QSpinBox,                              QMenu, QAction, QGridLayout, QHBoxLayout, QVBoxLayout,                              QTextEdit,QGroupBox, QStyle, QSystemTrayIcon)   import resource_rc   class SystemTrayDemo(QDialog):     def __init__(self):         super(SystemTrayDemo, self).__init__()                  # 设置窗口标题         ('实战PyQt5: 演示应用最小化到托盘')                  #设置窗口尺寸         (400, 300)                   = QIcon(':/panda.png')         ()                  ()              def initUi(self):                  ()         ()                  mainLayout = QVBoxLayout()         mainLayout.addWidge)         (mainLayout)                  #让托盘图标显示在系统托盘上         ()              #创建托盘图标     def createTrayIcon(self):         aRestore = QAction('恢复(&R)', self, triggered = )         aQuit = QAction('退出(&Q)', self, triggered = QA().quit)                  menu = QMenu(self)         menu.addAction(aRestore)         menu.addAction(aQuit)                   = QSystemTrayIcon(self)         .setIcon()         .setContextMenu(menu)         .messageClicked.connect)         .activated.connect)          #气球信息控制部分     def createMessageGroupBox(self):          = QGroupBox('气球消息')                  #==== 消息类型控制部分 ====#         typeLabel = QLabel('消息类型:')                   = QComboBox()         .addItem('无类型', QSy)         .addItem().standardIcon),                               '信息', QSy)         .addItem().standardIcon),                              '警告', QSy)         .addItem().standardIcon),                              '错误', QSy)         .setCurrentIndex(1)                  #==== 消息显示持续时间部分 ====#         durationLabel = QLabel('持续时间:')                   = QSpinBox()         .setRange(5, 60)    #时间范围         .setSuffix(' s')    #后缀,秒         .setValue(15)       # 缺省时间 15秒                  #spinbox 右边的警告提示信息         durationWarningLabel = QLabel('(一些系统可能会忽略消息显示的持续时间控制)')         dura(10)                  #==== 消息标题栏控制 ====#         titleLabel = QLabel('标题:')                   = QLineEdit('不能连接到网络')                  #==== 消息编辑栏 ====#         bodyLabel = QLabel('消息:')          = QTextEdit()         .setPlainText('不要问我, 老实说吧,我也不知道原因。'                                    '\n请点击气球图标获得更多信息')                  #==== 显示消息按钮 ====#         showMessageButton = QPushButton('显示消息')         (True)         )                  #==== 将上述部件加入到一个网格布局中         msgLayout = QGridLayout()         m(typeLabel, 0, 0)     #0行0列         m(, 0, 1, 1, 2)    #0行1列, 占1行2列         m(durationLabel, 1, 0)    #1行0列         m(, 1, 1)     #1行1列         m(durationWarningLabel, 1, 2, 1, 3)  #1行2列, 占1行3列         m(titleLabel, 2, 0)     #2行0列         m(, 2, 1, 1, 4)  #2行1列, 占1行4列         m(bodyLabel, 3, 0)     #3行0列         m(, 3, 1, 2, 4)  #3行1列, 占2行4列         m(showMessageButton, 5, 4) #5行4列         m(3, 1)         m(4, 1)                  .setLayout(msgLayout)           #显示气球信息        def showMessage(self):         #根据消息类型获取图标         icon = QSy(.itemData(.currentIndex()))         Message(.text(),         #标题                                   .toPlainText(),   #信息                                   icon,                          #图标                                   .value() * 1000) #信息显示持续时间          #关闭事件处理, 不关闭,只是隐藏,真正的关闭操作在托盘图标菜单里     def closeEvent(self, event):         if .isVisible():             QMe(self, '系统托盘',                                      '程序将继续在系统托盘中运行,要终止本程序,\n'                                     '请在系统托盘入口的上下文菜单中选择"退出"')             ()             event.ignore()          def messageClicked(self):         QMe(None, '系统托盘',                                 '对不起,我已经尽力了。'                                 '也许你应该试着问一个人?')                   def iconActivated(self, reason):         if reason in , QSy):             ()      if __name__ == '__main__':     app = QApplication)          #如果系统不支持最小化到托盘     if not QSy():         QMe(None, '系统托盘', '本系统不支持托盘功能')         (1)              QA(False)          window = SystemTrayDemo()     window.show()     ())

运行结果如下图:

应用最小化到系统托盘

本文知识点

  • 应用最小化到托盘的方法。
  • 控制托盘气球信息。
  • 通过托盘图标恢复应用的正常显示或者退出应用。

喜欢本文内容就多多关注,评论,收藏,点赞,和转发。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“pb如何最小化到托盘”边界阅读