Фон
Я работаю над проектом, в котором пользователю нужен быстрый доступ к слайдерам и другим виджетам, и я хотел бы добавить несколько виджетов в меню systray
IЭкспериментировал с созданием пользовательского меню (см. код ниже), и это работает при добавлении меню в строку меню:
Но не при добавлении пользовательского меню в системный трей:
(меню пустое и высотой всего несколько пикселей)
Вопрос
Как получить пользовательские виджеты в системном трее?
Благодарность за помощь!
Установка
- 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_()