Как сделать так, чтобы 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_()
А вот как это выглядит:
Есть ли способ:
- получить правильные значения полей, соответствующие стандартным пунктам меню
- получить шрифт, соответствующий стандартным пунктам меню