Qt5 - 如何向系统托盘应用程序添加水平子菜单

问题描述

我正在尝试创建一个非常小的系统托盘应用程序(在 python 中,使用 PyQt5),它将具有某些功能和一些按钮:“倒带”、“播放/暂停”、“前进”。通过使用 QMenu,我可以创建一个带有垂直条目的菜单。但是,我希望上面提到的这 3 个按钮水平显示

为此,我对 QWidgetAction 进行了子类化并创建了一个具有水平布局和 3 个按钮的小部件。然后我用 QWidgetActionmenu.addAction(my_instance) 添加到我的菜单中。问题是,水平按钮没有显示,我只能看到如下所示的空条目:

emptyHorizontalBox

这是我的简化代码

import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import (
    QSystemTrayIcon,QApplication,QAction,QMenu,QWidgetAction,QWidget,QHBoxLayout,QPushButton
)

from PyQt5.QtCore import Qt


class Player(QWidgetAction):

  def __init__(self,parent):
    super(Player,self).__init__(parent)
  
  def addWidget(self,parent: QWidget):
    widget = QWidget(parent)
    h_layout = QHBoxLayout()
    # Set buttons
    left = QPushButton(QIcon('../rewind.png'),'')
    left.setFixedSize(60,25)
    center = QPushButton(QIcon('../play-pause.png'),'')
    center.setFixedSize(60,25)
    right = QPushButton(QIcon('../forward.png'),'')
    right.setFixedSize(60,25)
    h_layout.addWidget(left,Qt.AlignLeft)
    h_layout.addWidget(center,Qt.AlignCenter)
    h_layout.addWidget(right,Qt.AlignRight)
    # Update layout and set widget
    widget.setLayout(h_layout)
    self.setDefaultWidget(widget)
    
    return widget

if __name__ == "__main__":
  # Init app
  app = QApplication(sys.argv)
  app.setQuitOnLastwindowClosed(False)
  # Init tray menu
  menu = QMenu()
  # Add 2 dummy actions
  quit_action = QAction("Quit")
  quit_action.triggered.connect(app.quit)
  menu.addAction(QAction("BO"))
  menu.addAction(quit_action)
  # Add player widget action
  testWidget = Player(menu)
  testWidget.addWidget(menu)
  menu.addAction(testWidget)
  # Add tray and connect
  tray = QSystemTrayIcon()
  tray.setIcon(QIcon("color_circle.png"))
  tray.setVisible(True)
  tray.setContextMenu(menu)
  tray.show()
  sys.exit(app.exec_())

搜索了许多帖子/教程,但找不到任何解决此问题的方法。我将不胜感激(不必特定于 Python)!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)