【问题标题】:QSystemTrayIcon change IconQSystemTrayIcon 更改图标
【发布时间】:2018-06-21 10:28:39
【问题描述】:

我正在尝试更改/更新 QSystemtrayIcon 的图标,但它不起作用。

main.py:

if __name__=="__main__":

app = QApplication(sys.argv)

from systray import SystemTrayIcon
trayIcon = SystemTrayIcon(parent=app)
trayIcon.show()

sys.exit(app.exec_())

系统托盘.py:

class SystemTrayIcon(QSystemTrayIcon):

def __init__(self, parent=None):
    QSystemTrayIcon.__init__(self, parent)
    icon = QIcon(abspath("images/icon.png"))
    self.setIcon(icon)
    #menu stuff and so on

def set_icon(self):
    self.setIcon(QIcon(abspath("images/envelope.png")))

在我的 mainwindow.py 中,我想在事件发生时更改图标。如何调用 set_icon 方法或直接从 mainwindow.py 更改图标?

非常感谢

编辑:

我尝试在 mainwindow.py 中进行以下操作:

import systray

class MainWindow(QWidget):
    #class stuff

    def change_icon(self):
        trayIcon = systray.SystemTrayIcon()
        trayIcon.set_icon()

该函数被调用,当我在系统托盘中的 set_icon 中放置一个打印件时,它的打印件将被打印,但它不会更改图标。

有什么建议吗?

【问题讨论】:

    标签: python qt5 pyside2


    【解决方案1】:

    我在您的代码中看到的问题是,在 mainwindow.py 中,您正在创建另一个 SystemTrayIcon,它是一个局部变量,正如您所说,它正确调用了函数 set_icon,但由于它是一个局部变量,所以当它是运行完 set_icon,这样就不会看到了。

    一种可能的解决方案是在构造函数中将其传递给 systray 并使其成为该类的成员:

    ma​​inwindow.py

    from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton
    
    class MainWindow(QWidget):
        def __init__(self, systray, parent=None):
            QWidget.__init__(self, parent)
            lay = QVBoxLayout(self)
            self.button = QPushButton("Change Icon")
            lay.addWidget(self.button)
            self.systray = systray
    
            self.button.clicked.connect(self.systray.set_icon)
    

    systray.py

    from os.path import abspath
    
    from PyQt5.QtWidgets import QSystemTrayIcon
    from PyQt5.QtGui import QIcon
    
    
    class SystemTrayIcon(QSystemTrayIcon):
        def __init__(self, parent=None):
            QSystemTrayIcon.__init__(self, parent)
            icon = QIcon(abspath("images/icon.png"))
            self.setIcon(icon)
    
        def set_icon(self):
            self.setIcon(QIcon(abspath("images/envelope.png")))
    

    ma​​in.py

    import sys
    
    from PyQt5.QtWidgets import QApplication
    
    from mainwindow import MainWindow
    from systray import SystemTrayIcon
    
    
    if __name__=="__main__":
    
        app = QApplication(sys.argv)
    
        systray = SystemTrayIcon(app)
        systray.show()
        w = MainWindow(systray)
        w.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      相关资源
      最近更新 更多