如何在PySide2的QLabel右键唤出QMenu后保留选中文本蓝色背景
解决QLabel右键唤出菜单后选中文本背景变色的问题
问题根源在于你在rightMenuShow方法中重复设置了QLabel的样式表,额外添加了background-color: #f9f9f9;,这会让整个标签背景变为灰色,直接覆盖了文本选中时的蓝色背景样式,而且重复设置样式表属于冗余操作。
修复步骤:
- 移除
rightMenuShow方法中重新设置样式表的代码,保留初始化时的样式配置即可 - 在QLabel的样式表中明确指定
selection-background-color属性,确保选中文本的背景色不受其他操作干扰
修正后的完整代码:
import pyperclip import sys from PySide2.QtCore import Qt from PySide2.QtGui import QCursor from PySide2.QtWidgets import QLabel, QMenu, QAction, QHBoxLayout, QApplication, QWidget class moreInfoLabel(QLabel): def __init__(self, *args, **kw): super().__init__(*args, **kw) self.setTextInteractionFlags(Qt.TextSelectableByMouse) self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.rightMenuShow) # 初始化样式表,明确指定选中文本的背景色 self.setStyleSheet(''' QMenu { border: 0px; font-size: 9pt; width:100px; background-color:white } QMenu::item { width:160px; font-family: "Microsoft YaHei"; border: 0px; min-height: 15px; max-height: 26px; padding:10px 15px 10px 15px; font-size: 9pt; } QMenu::item:selected { background-color: #f9f9f9; } QLabel{ font-size:13px; font-family:微软雅黑; } /* 强制设置选中文本的背景色 */ QLabel::selection { background-color: #1E90FF; /* 这里用你需要的蓝色,可自行调整 */ } ''') def rightMenuShow(self, pos): menu = QMenu(self) copy_action = QAction('复制', menu) select_all_action = QAction('全选', menu) menu.addAction(copy_action) menu.addAction(select_all_action) menu.triggered.connect(self.menuSlot) menu.exec_(QCursor.pos()) def menuSlot(self, act): if act.text() == '复制': pyperclip.copy(self.selectedText()) elif act.text() == '全选': self.setSelection(0, len(self.text())) class Demo(QWidget): def __init__(self): super(Demo, self).__init__() self.moreinfo = moreInfoLabel("YOUJIAN") self.layout = QHBoxLayout() self.layout.addWidget(self.moreinfo) self.setLayout(self.layout) if __name__ == "__main__": app = QApplication(sys.argv) demo = Demo() demo.show() sys.exit(app.exec_())
额外说明:
- 样式表中
QLabel::selection是专门控制选中文本背景的属性,设置后无论是否唤出右键菜单,选中文本都会保持你指定的蓝色背景 - 移除重复的样式表设置后,QLabel的原有状态不会被意外修改,右键菜单弹出后选中文本的样式也能保持一致
内容的提问来源于stack exchange,提问作者yongnisang
相关产品推荐
相关产品推荐

