自定义QMenu添加到系统托盘后不显示小部件

时间:2018-10-01 12:40:32

标签: python pyqt pyqt5 qmenu qsystemtrayicon

背景

我正在一个项目中,用户需要快速访问滑块和其他小部件,我想在系统托盘菜单中添加一些小部件

我已经尝试过创建自定义菜单(请参见下面的代码),并且在将菜单添加到菜单栏中时可以正常工作:

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位(使用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_()

0 个答案:

没有答案