rxts 发表于 2025-2-15 22:21:47

富文本不起作用

'
    def context_MenuEvent(self, event):   #右键菜单
      context_menu = QMenu(self)
      #
      color_del = context_menu.addAction('删除 | 标记')
      for i in ['white', 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'gray']:
            mysekect_menu = context_menu.addAction(f"标记 | {i}")
            mysekect_menu.triggered.connect(self.code_tag)

      mysekect_del = context_menu.addAction('<font color="red">删除</font> | <font color="black">自选</font>')
'
设置的富文本不起作用,是怎么回事,这是pyside6的代码, 是window平台

FishC 发表于 2025-2-15 22:21:52

看起来你的代码中存在一些问题。让我来帮助你整理一下代码,并指出可能的问题。

1. 变量 `i` 没有定义,你需要在循环中定义或传递它。
2. 所有动作都需要连接相应的槽函数(例如 `self.code_tag`)。

这是一个简化的版本:

def context_MenuEvent(self, event):# 右键菜单
    context_menu = QMenu(self)

    color_del = context_menu.addAction('删除 | 标记')
    for i in range(5):# 假设 i 的范围是 0 到 4
      myselect_menu = context_menu.addAction(f"标记 | {i}")
      myselect_menu.triggered.connect(self.code_tag)

    myselect_del = context_menu.addAction('删除 | 自选')

    # 显示菜单
    context_menu.exec_(event.globalPos())

def code_tag(self):
    # 这里实现你的标记逻辑
    print("标记被点击")

确保你已经导入了必要的模块,例如 QMenu 等。如果还有其他问题,请补充更多细节。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

rxts 发表于 2025-2-15 22:23:19

FishC 发表于 2025-2-15 22:21
看起来你的代码中存在一些问题。让我来帮助你整理一下代码,并指出可能的问题。

1. 变量 `i` 没有定义, ...

mysekect_del = context_menu.addAction('<font color="red">删除</font> | <font color="black">自选</font>')这段代码的富文本没有起作用

FishC 发表于 2025-2-15 22:23:29

rxts 发表于 2025-02-15 22:23
FishC 发表于 2025-2-15 22:21
看起来你的代码中存在 ...

在 PySide6(或 PyQt)中,默认情况下 QMenu 的动作文本不支持 HTML 富文本。如果你想使用富文本格式,你需要使用自定义的 QLabel 小部件来实现。

下面是一个使用 QLabel 作为动作项的示例:

from PySide6.QtWidgets import QApplication, QMainWindow, QMenu, QLabel, QAction
from PySide6.QtGui import QCursor

class MainWindow(QMainWindow):
    def __init__(self):
      super().__init__()
      self.setWindowTitle('右键菜单示例')
      self.setGeometry(100, 100, 600, 400)

      self.setContextMenuPolicy(Qt.CustomContextMenu)
      self.customContextMenuRequested.connect(self.context_MenuEvent)

    def context_MenuEvent(self, event):# 右键菜单
      context_menu = QMenu(self)

      color_del = context_menu.addAction('删除 | 标记')
      for i in range(5):# 假设 i 的范围是 0 到 4
            myselect_menu = context_menu.addAction(f"标记 | {i}")
            myselect_menu.triggered.connect(self.code_tag)

      # 使用QLabel实现富文本
      label = QLabel()
      label.setText("删除 | <b>自选</b>")
      action = QWidgetAction(self)
      action.setDefaultWidget(label)
      context_menu.addAction(action)

      # 显示菜单
      context_menu.exec_(QCursor.pos())

    def code_tag(self):
      # 这里实现你的标记逻辑
      print("标记被点击")

if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec()

这种方法利用 QLabel 设置富文本内容,然后将其包装在 QWidgetAction 中添加到菜单中。

你可以根据需要进行调整,确保符合作用。希望这能解决你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2025-2-16 15:39:54

ySide6 的 QMenu 并不会解析这些 HTML 标签,因此文本会原样显示,而不是渲染为富文本。

你可以通过 QWidgetAction,你可以在菜单项中添加自定义的 QWidget,从而实现富文本效果。

try this:

"""
1.QWidgetAction:

使用 QWidgetAction 将自定义的 QLabel 添加到菜单中。

QLabel 支持富文本(HTML),因此可以通过 <font> 标签设置文本颜色。

2.label.setAlignment(Qt.AlignCenter):

设置文本居中对齐,使菜单项看起来更美观。

3.context_menu.exec_(event.globalPos()):

在鼠标右键点击的位置显示菜单。
"""
from PySide6.QtWidgets import QMenu, QAction, QWidgetAction, QLabel
from PySide6.QtGui import QColor
from PySide6.QtCore import Qt
class MyWindow:
    def context_MenuEvent(self, event):
      context_menu = QMenu(self)
      # 添加普通菜单项
      color_del = context_menu.addAction('删除 | 标记')
      # 添加带有颜色的菜单项
      for i in ['white', 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'gray']:
            myselect_menu = context_menu.addAction(f"标记 | {i}")
            myselect_menu.triggered.connect(self.code_tag)
      # 使用 QWidgetAction 添加富文本菜单项
      widget_action = QWidgetAction(context_menu)
      label = QLabel('<font color="red">删除</font> | <font color="black">自选</font>')
      label.setAlignment(Qt.AlignCenter)
      widget_action.setDefaultWidget(label)
      context_menu.addAction(widget_action)
      # 显示菜单
      context_menu.exec_(event.globalPos())
    def code_tag(self):
      print("标记操作被触发")

页: [1]
查看完整版本: 富文本不起作用