如何在PySide2和qfluentwidgets中调整系统托盘菜单的位置?

我基于pyside2 和 qfluentwidgets写了一个python程序,其中包含了一个系统托盘,但是我遇到了一些问题,我的系统托盘的菜单总是显示在最下方,导致无法完整显示下面是效果和代码

import sys

from PySide2 import QtCore
from PySide2.QtGui import QIcon
from PySide2.QtWidgets import QSystemTrayIcon, QApplication, QAction
from qfluentwidgets import SplitFluentWindow, RoundMenu
import resource.app_icon


class MainWindow(SplitFluentWindow):

    def __init__(self):
        super().__init__()
        self.sysTray = QSystemTrayIcon()
        self.icon = QIcon(":/icon.ico")
        self.sysTray.setIcon(self.icon)
        self.trayIconMenu = RoundMenu()
        self.trayIconMenu.addAction(QAction("主界面"))
        self.trayIconMenu.addSeparator()
        self.trayIconMenu.addAction(QAction("设备"))
        self.trayIconMenu.addAction(QAction("状态"))
        self.trayIconMenu.addAction(QAction("任务"))
        self.trayIconMenu.addSeparator()
        self.trayIconMenu.addAction(QAction("重启"))
        self.trayIconMenu.addAction(QAction("退出"))
        self.sysTray.setContextMenu(self.trayIconMenu)
        # 创建主窗口
        self.sysTray.show()


if __name__ == '__main__':
    QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)  # 设置qt界面大小与原设计界面比例相同
    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec_())

这是正常的这是我的

希望有大佬能告知我这个位置怎么可以调整

阅读 1.5k
1 个回答

通过设置系统托盘图标的锚点和偏移来间接控制菜单的位置。

改写了一个例子:

from PySide2.QtWidgets import QApplication, QSystemTrayIcon, QMenu
from PySide2.QtGui import QIcon
from PySide2.QtCore import QPoint

app = QApplication([])

# 创建系统托盘图标
tray_icon = QSystemTrayIcon()
tray_icon.setIcon(QIcon('icon.png'))
tray_icon.setVisible(True)

# 创建菜单
menu = QMenu()
action1 = menu.addAction("Action 1")
action2 = menu.addAction("Action 2")

# 设置系统托盘图标的菜单
tray_icon.setContextMenu(menu)

# 获取系统托盘图标的几何信息
tray_geometry = tray_icon.geometry()

# 设置菜单的位置,这里我们将其设置为系统托盘图标的正下方
menu_position = QPoint(tray_geometry.x(), tray_geometry.y() + tray_geometry.height())

# 显示菜单
menu.exec_(menu_position)

app.exec_()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏