如何将QSystemTrayIcon与MacOS Sonoma菜单栏完全集成?

问题描述 投票:0回答:1

在索诺玛,MacOS 菜单栏会根据壁纸、辅助功能设置以及其他事件自动更改其外观。

MacOS Sonoma 菜单栏可以是黑色、白色或半透明,并显示壁纸颜色。然后操作系统似乎会选择菜单栏图标是黑色还是白色,应用程序可以控制它是否变灰。

A Pyside6 QSystemTrayIcon and Menu

QSystemTrayIcon 在 Pyside6(Python 封装的 Qt)中开发,允许实现菜单栏图标、菜单、操作等,就像传统上在 Qt 中所做的那样,使用 QAction 来实现菜单项和回调。

    import PySide6.QtWidgets as qtw
    import PySide6.QtCore as qtc
    import PySide6.QtGui as qtg
    
    # Create the tray
    self.tray = qtw.QSystemTrayIcon()
    self.tray.setIcon(self.icon)
    self.tray.setVisible(True)

    # Create the menu
    self.menu = qtw.QMenu()
    self.action = qtg.QAction("About My App...")
    self.menu.addAction(self.action)

    # Add a Quit option to the menu.
    self.quit = qtg.QAction("Quit")
    self.quit.triggered.connect(self.app.quit)
    self.menu.addAction(self.quit)

    # Add the menu to the tray
    self.tray.setContextMenu(self.menu)

当操作系统决定(壁纸更改等)或应用程序决定时,菜单栏图标颜色可以改变。我上面的简单实现不符合图标颜色变化,如下所示。

enter image description here

如何正确处理 PySide6 应用程序中的菜单栏图标颜色首选项和更改事件?

PySide6.7 QSystemTrayIcon 文档声明可以在 MacOS 上使用,但似乎没有 QObject 方法来处理操作系统的图标颜色配置和颜色更改事件。

(上面显示的图标是 Google Material Design 图标,已获得 Apache 许可。)

macos user-interface menu pyside6 macos-sonoma
1个回答
0
投票
正如

musicamante 所指出的,这已经在here得到了类似的回答。

为了允许操作系统将图标设置为黑色或白色,图标需要通过调用 setIsMask() 设置其 mask 属性:

# Create the icon self.icon = qtg.QIcon("img/widgets_96.png") self.icon.setIsMask(True)
要在应用程序未启用时将图标设置为灰色(如上面的焦点和舞台管理器图标),我想我可以简单地设置一个灰色图标,而不设置遮罩。

感谢评论中的

musicamante,以及Giacomo 8年前提供的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.