鱼C论坛

 找回密码
 立即注册
查看: 95|回复: 4

[已解决]富文本不起作用

[复制链接]
发表于 2025-2-15 22:21:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
'
    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平台
最佳答案
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("标记操作被触发")

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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>')这段代码的富文本没有起作用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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("标记操作被触发")

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-24 02:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表