1

我目前正在 python/pyside2 中开发一个托盘应用程序。我正在尝试创建自定义 QMenu 项目(包含 QLabels 和 QProgressBars)。我设法获得了基本功能,但是 QLabels 的对齐方式和字体大小与常规的 QAction 菜单项不同。我解决了 QLayout 边距的对齐问题,但这些是硬编码的大小,我相信有办法以某种方式获得正确的值。

这是演示代码:

from PySide2.QtGui import *
from PySide2.QtWidgets import *


def quit_action_clicked():
    app.quit()


def test_action_clicked():
    pass


if __name__ == "__main__":

    app = QApplication([])
    app.setQuitOnLastWindowClosed(False)
    icon = QIcon("assets/icons.iconset/icon_128x128.png")

    tray = QSystemTrayIcon()
    tray.setIcon(icon)
    tray.setVisible(True)

    menu = QMenu()
    add_action = QAction("Barfoobaz")
    menu.addAction(add_action)
    test_action = QAction("Foobarbaz")
    test_action.triggered.connect(test_action_clicked)
    menu.addAction(test_action)
    menu.addSeparator()

    widget = QWidget()
    layout = QVBoxLayout()
    innerLayout = QGridLayout()
    innerLayout.setSpacing(2)
    innerLayout.setContentsMargins(0, 0, 0, 3)
    innerLayout.addWidget(QLabel("Name:"), 0, 0)
    innerLayout.addWidget(QLabel("tank"), 0, 1)
    innerLayout.addWidget(QLabel("GUID:"), 1, 0)
    innerLayout.addWidget(QLabel("12345678901234567890"), 1, 1)
    innerLayout.addWidget(QLabel("Status:"), 2, 0)
    innerLayout.addWidget(QLabel("healthy"), 2, 1)
    layout.addLayout(innerLayout)
    bar = QProgressBar()
    bar.setValue(70)
    layout.addWidget(bar)
    layout.addWidget(QLabel("Size: 2TB, 1.87TB free"))
    layout.setContentsMargins(21, 0, 15, 0)
    layout.setSpacing(0)
    widget.setLayout(layout)
    berAction = QWidgetAction(menu)
    berAction.setDefaultWidget(widget)

    menu.addAction(berAction)
    menu.addSeparator()
    action = QAction("Quit")
    action.triggered.connect(quit_action_clicked)

    menu.addAction(action)
    tray.setContextMenu(menu)
    app.exec_()

这是它的外观:

在此处输入图像描述

有没有办法:

  • 获取正确的边距值以匹配标准菜单项
  • 获取字体以匹配标准菜单项
4

0 回答 0