Пользовательский QMenu не показывает виджеты, когда он добавлен в systray - PullRequest
0 голосов
/ 01 октября 2018

Фон

Я работаю над проектом, в котором пользователю нужен быстрый доступ к слайдерам и другим виджетам, и я хотел бы добавить несколько виджетов в меню systray

IЭкспериментировал с созданием пользовательского меню (см. код ниже), и это работает при добавлении меню в строку меню:

enter image description here

Но не при добавлении пользовательского меню в системный трей:

enter image description here

(меню пустое и высотой всего несколько пикселей)

Вопрос

Как получить пользовательские виджеты в системном трее?

Благодарность за помощь!

Установка

  • Qt версия: 5.11.1
  • PyQt (модуль Python) версия: 5.11.2
  • Версия Python: 3.6.6
  • ОС: Lubuntu 18.04 64-bit (с использованием LXDE)

код

from PyQt5 import QtCore
from PyQt5 import QtGui
from PyQt5 import QtWidgets
import sys


class MyMainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.setGeometry(100, 100, 400, 300)

        self.central_widget = QtWidgets.QWidget()
        self.setCentralWidget(self.central_widget)

        vbox_l2 = QtWidgets.QVBoxLayout()
        self.central_widget.setLayout(vbox_l2)

        self.tray_icon = QtWidgets.QSystemTrayIcon(
            QtGui.QIcon(),
            self
        )
        self.tray_icon.show()

        self.tray_menu = CustomMenu()
        self.tray_icon.setContextMenu(self.tray_menu)

        # Main menu
        self.main_menu = CustomMenu()
        self.menu_bar = self.menuBar()
        self.menu_bar.addMenu(self.main_menu)

        self.show()


class CustomMenu(QtWidgets.QMenu):
    def __init__(self):
        super().__init__()

        self.setTitle("custom menu title")

        vbox = QtWidgets.QVBoxLayout()
        self.setLayout(vbox)
        # self.setMen
        self.my_label = QtWidgets.QLabel("test label in custom layout")
        vbox.addWidget(self.my_label)

        self.my_slider = QtWidgets.QSlider()
        self.my_slider.setMinimum(0)
        self.my_slider.setMaximum(10)
        self.my_slider.setOrientation(QtCore.Qt.Horizontal)
        vbox.addWidget(self.my_slider)

        self.show()

        # self.addAction("example action")


app = QtWidgets.QApplication(sys.argv)

main_window = MyMainWindow()
main_window.show()
app.exec_()
...