问题描述
我正在尝试创建一个非常小的系统托盘应用程序(在 python 中,使用 PyQt5),它将具有某些功能和一些按钮:“倒带”、“播放/暂停”、“前进”。通过使用 QMenu
,我可以创建一个带有垂直条目的菜单。但是,我希望上面提到的这 3 个按钮水平显示。
为此,我对 QWidgetAction
进行了子类化并创建了一个具有水平布局和 3 个按钮的小部件。然后我用 QWidgetAction
将 menu.addAction(my_instance)
添加到我的菜单中。问题是,水平按钮没有显示,我只能看到如下所示的空条目:
这是我的简化代码:
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 (将#修改为@)