Как сделать так, чтобы QLabel, завернутый в QWidgetAction, соответствовал положению и размеру шрифта стандартных пунктов меню?

В настоящее время я работаю над приложением лотка в 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_()

А вот как это выглядит:

Есть ли способ:

  • получить правильные значения полей, соответствующие стандартным пунктам меню
  • получить шрифт, соответствующий стандартным пунктам меню

0 ответов

Другие вопросы по тегам