告别丑陋代码块!用PyQt5+pygments实现Word代码高亮粘贴(附完整源码)
告别丑陋代码块用PyQt5pygments实现Word代码高亮粘贴附完整源码在技术文档编写过程中代码展示是不可或缺的部分。然而直接将IDE中的代码复制到Word文档时往往会丢失原有的高亮和格式变成单调的黑白文本。这不仅影响文档的美观性也降低了代码的可读性。本文将介绍如何利用PyQt5和pygments库构建一个开箱即用的GUI工具实现代码高亮并完美粘贴到Word文档中。1. 工具设计与核心功能代码高亮工具的核心目标是解决开发者日常文档编写中的痛点。我们需要的不仅是一个简单的转换工具而是一个具备完整功能的解决方案多语言支持能够识别并高亮显示多种编程语言的代码样式自定义提供多种高亮主题供用户选择行号显示可选是否显示行号方便代码引用实时预览转换结果即时可见无需反复尝试一键复制简化操作流程提升效率PyQt5作为Python的GUI工具包提供了强大的界面构建能力而pygments则是专业的代码高亮库两者的结合能够完美实现上述功能。2. 环境准备与依赖安装在开始构建工具前需要确保开发环境已准备好必要的依赖项。以下是所需的Python库及其安装方法pip install PyQt5 PyQtWebEngine pygments这些库分别提供以下功能PyQt5GUI界面开发框架PyQtWebEngine在PyQt5中嵌入Web引擎用于显示HTML内容pygments代码高亮处理核心库安装完成后可以通过以下命令验证是否安装成功import PyQt5 from pygments import highlight print(所有依赖已正确安装)3. 核心功能实现3.1 代码高亮转换引擎代码高亮的核心功能由pygments库实现。我们需要构建一个转换函数将原始代码转换为带样式的HTMLfrom pygments import highlight from pygments.lexers import get_lexer_by_name from pygments.formatters import HtmlFormatter def code_to_html(code, languagepython, styledefault, linenosFalse): 将代码转换为带高亮的HTML :param code: 原始代码文本 :param language: 编程语言类型 :param style: 高亮主题样式 :param linenos: 是否显示行号 :return: 带样式的HTML字符串 try: lexer get_lexer_by_name(language) formatter HtmlFormatter(stylestyle, linenoslinenos) return highlight(code, lexer, formatter) except: return fpre{code}/pre3.2 PyQt5 GUI界面设计使用PyQt5构建用户友好的界面主要包含以下组件代码输入区域QTextEdit控件用于输入或粘贴原始代码预览区域QWebEngineView控件显示高亮后的代码效果控制面板语言选择下拉框样式主题选择下拉框行号显示复选框转换按钮from PyQt5.QtWidgets import (QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QTextEdit, QComboBox, QCheckBox, QPushButton) from PyQt5.QtWebEngineWidgets import QWebEngineView class CodeHighlighterApp(QMainWindow): def __init__(self): super().__init__() self.init_ui() def init_ui(self): # 主窗口设置 self.setWindowTitle(代码高亮转换工具) self.setGeometry(100, 100, 800, 600) # 中央部件 central_widget QWidget() self.setCentralWidget(central_widget) # 主布局 main_layout QHBoxLayout() central_widget.setLayout(main_layout) # 左侧面板输入和控制 left_panel QWidget() left_layout QVBoxLayout() left_panel.setLayout(left_layout) # 控制面板 control_panel QWidget() control_layout QHBoxLayout() control_panel.setLayout(control_layout) # 语言选择 self.lang_combo QComboBox() self.lang_combo.addItems([Python, Java, C, JavaScript, HTML, CSS]) control_layout.addWidget(self.lang_combo) # 样式选择 self.style_combo QComboBox() self.style_combo.addItems([default, monokai, friendly, vim]) control_layout.addWidget(self.style_combo) # 行号复选框 self.linenos_check QCheckBox(显示行号) control_layout.addWidget(self.linenos_check) # 转换按钮 self.convert_btn QPushButton(转换) self.convert_btn.clicked.connect(self.convert_code) control_layout.addWidget(self.convert_btn) left_layout.addWidget(control_panel) # 代码输入框 self.code_input QTextEdit() self.code_input.setPlaceholderText(在此粘贴或输入代码...) left_layout.addWidget(self.code_input) # 右侧预览面板 self.preview QWebEngineView() self.preview.setHtml(h3转换结果将显示在这里/h3) # 将左右面板添加到主布局 main_layout.addWidget(left_panel, 1) main_layout.addWidget(self.preview, 1)4. 高级功能实现4.1 样式自定义与扩展pygments提供了丰富的内置样式但我们也可以自定义样式以满足特定需求。以下是自定义样式的实现方法from pygments.style import Style from pygments.token import Keyword, Name, Comment, String class CustomStyle(Style): default_style styles { Keyword: #FF0000 bold, Name: #00FF00, Comment: #888888 italic, String: #0000FF }要将自定义样式应用到工具中需要修改转换函数def code_to_html(code, languagepython, styleCustomStyle, linenosFalse): lexer get_lexer_by_name(language) formatter HtmlFormatter(stylestyle, linenoslinenos) return highlight(code, lexer, formatter)4.2 Word粘贴优化为了确保高亮代码能完美粘贴到Word中需要注意以下几点HTML结构优化Word对HTML的解析有其特殊性需要确保生成的HTML结构简洁内联样式优先尽量使用内联样式而非外部CSS提高Word兼容性表格布局使用表格布局可以更好地保持代码块的格式优化后的转换函数示例def code_to_word_html(code, languagepython, styledefault, linenosFalse): lexer get_lexer_by_name(language) formatter HtmlFormatter(stylestyle, linenoslinenos, noclassesTrue) highlighted highlight(code, lexer, formatter) # 添加Word兼容的HTML结构 return f html body table border0 cellspacing0 cellpadding0 styleborder:1px solid #ccc; trtd stylepadding:5px; background:#f5f5f5; {highlighted} /td/tr /table /body /html 5. 完整工具集成与使用指南将上述功能模块整合后我们得到一个完整的代码高亮转换工具。以下是工具的使用步骤启动工具运行Python脚本打开GUI界面输入代码在左侧文本框中粘贴或输入需要高亮的代码设置选项选择代码对应的编程语言选择喜欢的高亮主题根据需要勾选显示行号转换预览点击转换按钮右侧将显示高亮效果复制到Word在预览区域全选(CtrlA)复制(CtrlC)在Word文档中粘贴(CtrlV)对于开发者来说这个工具可以进一步扩展添加更多语言支持通过pygments支持的lexer扩展自定义主题创建符合公司或团队文档规范的样式批量处理添加对多个代码文件批量转换的功能快捷键支持增加常用操作的快捷键提升效率if __name__ __main__: import sys from PyQt5.QtWidgets import QApplication app QApplication(sys.argv) window CodeHighlighterApp() window.show() sys.exit(app.exec_())在实际使用中我发现将工具打包为可执行文件会极大提升便利性。可以使用PyInstaller进行打包pyinstaller --onefile --windowed code_highlighter.py这将在dist目录下生成独立的可执行文件无需安装Python环境即可运行。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2451648.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!