在PySide6中,QSystemIconTrayIcon()的show()方法在调用hide()函数后不起作用

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

我的应用程序需要动态显示或隐藏系统托盘。但是一旦我在其上调用

.hide()
函数,然后在其上调用
.show()
,它就不会显示。与
.setVisible(...)
相同的行为。

最小可重复代码

我创建了一个最小的可重现代码来显示

QSystemTrayIcon
PySide6 类发生了什么问题。

import os
import sys
from PySide6.QtWidgets import *
from PySide6.QtCore import *
from PySide6.QtGui import *
import resources_rc

app = QApplication(sys.argv)

# Image
def _image(name: str):
    return os.path.join(':', 'saved_files', 'images', f'{name}.png')

# Setup system tray
tray = QSystemTrayIcon(QIcon(_image('folder')))
tray.show()
print('> Running\n')

def toggle_tray():
    tray.setVisible(not tray.isVisible())
    # tray.setIcon(QIcon(_image('folder')))                             # WORKAROUND (read below)
    print(f'[State Toggled] Tray Visible = {tray.isVisible()}')

# Timer to show/hide the tray icon
timer = QTimer()
timer.timeout.connect(toggle_tray)
timer.start(3000)
    
app.exec()

它应该如何工作:

它应该显示系统托盘图标,然后 3 秒后隐藏。然后3秒后,显示。然后3秒后,隐藏。循环继续。

它的表现如何:

它在开始时完美显示(应该如此),然后 3 秒后它隐藏(应该如此),但是 在接下来的 3 秒后,它不会显示 (因为它)应该有).

我找到的解决方法(经过多次尝试和错误)

  • 解决方法: 使用 tray.setIcon(QIcon(_image('folder')))
    .hide()
    隐藏托盘图标后,使用
    .setVisible(False)
    再次设置系统托盘
     的图标。
  • 结果:一切都按预期进行,但这只是只是一种解决方法
  • 问题:我不明白为什么原始代码不起作用?是因为 .hide()
    .setVisible(False)
     正在从 
    QSystemTrayIcon()
     中删除图标还是其他原因?也许这是一个错误?我真的需要你在这方面的帮助。
信息:

  • 平台: Windows 11 Pro v22621.2361 (稳定版本)
  • Python版本:Python 3.11.4
  • PySide 版本: PySide6==6.5.3 | PySide6-Addons==6.5.3 | PySide6-Essentials==6.5.3
qt pyside pyside2 pyside6 qsystemtrayicon
1个回答
0
投票
这似乎是Qt 中的一个错误。我报告了,他们在 v6.5.4、v6.6.1、v6.7.0 中修复了它。

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