精华内容
下载资源
问答
  • 代码高亮网站
    千次阅读
    2021-11-17 10:27:37

    代码高亮网站CodeInword

    网址:Codeinword

    使用方法:

    将代码复制到左边区域,点击高亮即可生成高亮代码
    在这里插入图片描述
    复制右边代码到文档中即可
    在这里插入图片描述

    更多相关内容
  • 最开始我是在网上搜可以代码高亮网站: 代码在线高亮工具 | 将高亮美化的代码一键粘贴到 Word 或 OneNote 中 (highlightcode.com) 不过每次都这样把代码复制到网站上再粘贴下来很麻烦,能不能让它自动给我把代码复制...
  • 做了一个在线代码高亮的项目,强大的Python一如既往没让我失望,一个强大的Pygments模块可以对多种(很多)语言进行代码高亮 下面来介绍一下它: 首先安装很简单,使用easy_install来进行安装: easy_install pygments ...
  • 5.0论坛显示风格的php代码高亮显示插件, 把php代码进行语法着色,喜欢PHP的同志可以轻松的看代码啦。 同时添加了html代码运行功能。 此插件是在以前某位同志发布的Discuz!4的php代码高亮显示基础之上修改完成。 另外...
  • tinymce带prism代码高亮实现demo源码 tinymce带prism代码高亮实现demo源码 tinymce带prism代码高亮实现demo源码 重要的事情说三遍,这是我开发中的研究成果,后期详细解释及使用会更新到博客,demo先奉上。
  • Android Studio代码高亮插件ASTheme
  • 用SyntaxHighlighter 语法高亮插件的朋友可能都遇到过代码显示不换行的问题,这个问题在网上也找不到什么解决办法,一直困扰了我很久,今天算是把它解决了,办法其实简单,下面说下如何解决
  • 易语言超级列表框代码高亮源码
  • 内容索引:VB源码,字符处理,语法高亮,代码高亮 这是一个简单版的代码编辑程序,名字叫做CodeView,内含VC、VB、C++等语言代码高亮的语法程序,还支持HTML和UBB语法,因此你可以将这些程序轻松的应用到对应的编程语言...
  • 打开AS后选择File → Import Setting → 选中下载后的Theme jar包 → 重启Studio
  • js实现代码示例(高亮、行号和格式化)
  • 易语言超级列表框代码高亮源码,超级列表框代码高亮,读取关键字配置,新窗口过程,分词,取单元矩形,填充区域,缩小矩形,SetWindowLong,Api_CallWindowProcA,Api_SendMessageA,Api_GetItemStatea,Api_GetSubItemRect,Api_...
  • 主要为大家分享了9个实用的Javascript代码高亮脚本,相信一定对大家的学习有所帮助,感兴趣的小伙伴们可以参考一下
  • 这个压缩包里含有12种高亮风格,我自己使用的是MyselfTheme,由于分析aosp需要看大量代码,一个能让自己眼睛舒服的代码主题也很重要,会让自己看代码更有感觉~。 具体导入方式(Android Studio)举例:File->Import...
  • Pycharm 代码高亮推荐配色: 打开Pycharm,选择 file -> settings -> import settings ,导入此文件即可。
  • 双击打开安装就可以了,有2个文件,一个是支持VS低版本的,请对号入座.
  • 微信公众平台代码高亮插入插件安装此插件可用于微信公众平台文章编辑时插入带高亮格式代码。更新记录2.0.1-[2020/10/08]修正插入的代码前面缩进消失问题。2.0.0-[2020/05/20]加入代码行号;自适应单行长度,无需再...
  • FCKeditor是现在最为流行的开源编辑器,SyntaxHighlighter是一个用JS实现的代码高亮显示插件,FCKeditor + SyntaxHighlighter 让代码高亮着色,可以最小化修改您的程序实现效果
  • 常在自己的BLOG中要发布些C#及其它的代码。 LBS自带的CODE标签功能太弱需要增强下。下面来介绍下要用到的高亮工具及要修改的文件
  • 在 WordPress 中加入了百度的 UEditor 编辑器后,由于自带的代码插件在使用时只会在代码外层加入 pre 标签,下面给出解决方法,需要的朋友可以参考下
  • FCKeditor 和 SyntaxHighlighter 代码高亮插件的整合方法,里面有下载,可以根据需要结合自己的fckeditor版本。
  • 代码高亮很有用,特别是在需要在网站或者blog中显示自己编写的代码的时候,或者给其他人查看或调试语法错误的时候。我们可以将代码高亮,以便阅读者可以十分方便的读取代码块,增加用户阅读代码的良好体验。 语法...
  • 最开始我是在网上搜可以代码高亮网站: 不过每次都这样把代码复制到网站上再粘贴下来很麻烦,能不能让它自动给我把代码复制下来,然后再传到网站上,再把网站上的内容给复制下来呢? 方法总归是有的.

    python小项目--word文档代码高亮

    干货(经验分享+学习笔记)

    目录

    python小项目--word文档代码高亮

    干货(经验分享+学习笔记)

    程序演示

    程序工作流程:

    1.网络生成:

    2.本地生成:

    1.网络生成高亮代码:

    2.本地生成代码高亮:

    1.本地生成高亮代码_无文本框

    2.本地生成高亮代码_有文本框

    3.本地生成高亮代码_有文本框_csdn

    4.本地生成高亮代码_粘贴到csdn

    一.前言

    二.基础知识储备及分享

    一.Python模拟键盘点击 实现ctrl+a,ctrl+c,ctrl+v

    1.需要的模块:pywin32

    2.ctrl+c

    1.用途:

    2.Bug与坑:

    3.ctrl+a,ctrl+c

    1.用途:

    3.退格

    1.用途:

    4.ctrl+v

    1.用途:

    5. Python关于键盘控制鼠标控制的其他文章链接。

    二.获取剪切板内容

    1.需要的模块:pyperclip

    2.使用:

    3.参考链接。

    三.web自动化,爬虫。(网络高亮)

    0.用途:

    具体流程:

    1.需要的模块:selenium

    2.学习自动化推荐

    3.创建浏览器驱动并打开网址(chrome浏览器)

    bug与坑:

    4.找到页面元素并操作。

    bug与坑:

    5.跳转标签页。

    6.复制网页文本

    bug与坑:

    7.Edge浏览器实现(接if)

    8.可参考的文章链接。

    四.本地实现代码高亮

    0.用途:

    具体流程:

    1.需要的模块:pygments

    2.生成html文件

    3.打开html并复制

    注意:

    4.可参考的文章链接。

    5.生成rtf文件,调用word操作(头疼的地方)

    5.0生成rtf文件

    5.1调用word软件复制文本

    五.参数传递

    六.可视化界面的开发

    需要安装的模块:tkinter

    可参考的文章或链接:

    七.为程序运行设置快捷键

    说明:

    1.为按钮绑定快捷键。

    参考文章。

    2.键盘监听实现快捷键。

    可参考的文章。

    1.问题。

    2.解决方法。

    3.使用线程。

    八.程序的打包发布

    1.可参考的文章。

    2.我在安装中遇到的问题。

    三.程序分享下载

    1.阿里云盘

    2.百度网盘

    3.csdn

    4.注意事项:

    四.源代码分享

    1.github

    2.csdn

    五.分享:英语四六级,专业四级八级,历年真题听力视频-中英双字幕+日语N3(双字幕)

    1.简介:

    2.视频链接:

    六.后记(转载注明出处)

    1.感谢:

    程序演示

    程序工作流程:

    1.网络生成:

    用户选文本

    用户选择按下快捷键程序开始执行

    程序Ctrl+c复制文本到解切版。

    获取解切板的内容到变量中。

    -----------------------------------------

    创建浏览器驱动,

    打开对应网址,

    找到文本输入框的元素,

    发送文本到文本框,

    找到开始按钮元素,

    按下这个元素。

    网页进行了跳转。

    切换转换后的网页。

    剩下的就是ctrl+a+C复制了。

    ------------------------------------------

    最后 退格删除原文本

    Ctrl+v粘贴新的高亮代码

    2.本地生成:

    用户选文本

    用户选择按下快捷键程序开始执行

    程序Ctrl+c复制文本到解切版。

    获取解切板的内容到变量中。

    ---------------------------------------------------------

    将剪切板的文本(代码)转换成 高亮的 html文件

    或者 rtf文件(word可读)

    用浏览器打开html文件并复制文本。

    用word软件打rtf文件并复制。(我并未完全实现)
    为什么使用rtf文件呢? 因为我发现 有时候 复制的html文件粘贴后 格式不,因此用了 rtf文件

    ----------------------------------------

    最后 退格删除原文本

    Ctrl+v粘贴新的高亮代码

    1.网络生成高亮代码:

     

    2.本地生成代码高亮:

    1.本地生成高亮代码_无文本框

     

    2.本地生成高亮代码_有文本框

     

    3.本地生成高亮代码_有文本框_csdn

     

    4.本地生成高亮代码_粘贴到csdn

     

    一.前言

    学习编程的同学可能都有这样的疑问:学编程要不要记笔记呢?

    我想答案是肯定的

    大家可以看看这一篇文章:

    (54条消息) 随笔-学习编程有没有必要做笔记?如何做笔记?_TianXinCoord的博客-CSDN博客_学编程有必要做笔记吗

    (54条消息) 编程时,你都用什么软件做的笔记?还是说你都不做笔记?_千锋python和唐唐的博客-CSDN博客_学编程记笔记用什么软件好

    那么,问题来了:我们应该是用什么工具来记笔记?

    可能会有同学使用word或者sdn来记笔记,在记笔记的过程中,难免少不了要敲代码。

    这时候我们敲的代码不能高亮显示,就没有感觉,很头疼。

    我也遇到了这样的问题,所以我想解决他。

    最开始我是在网上搜可以代码高亮的网站:

    代码在线高亮工具 | 将高亮美化的代码一键粘贴到 Word 或 OneNote 中 (highlightcode.com)

    不过每次都这样把代码复制到网站上再粘贴下来很麻烦,能不能让它自动给我把代码复制下来,然后再传到网站上,再把网站上的内容给复制下来呢?

    方法总归是有的.

    我们可以通过Python实现模拟按键,ctrl加C,将文本复制到剪切板。再用Python将剪切板的内容给复制下来.然后用selenium库上传文本到网站上并读取高亮后的结果。最后再模拟模拟按键ctrl加V将高量后的代码粘贴到word中。

    理论存在开始编写代码。

    不过在编写代码之后,我们又会想到这样一个问题。每次上传到网站上再复制下来,都需要耗费几秒钟的时间。这个时间可能太长了,而且说不定哪一天这个网站它就关闭了。那能不能实现本地自己代码高亮呢?

    经过查阅还真发现python提供了这样的代码高亮类库.pygments

    Pygments 文档 — Pygments

    这个类库可以将代码高亮后生成各种格式的文件,我想到用它来生成html文件再用浏览器驱动自己打开并复制粘贴。

    这个类库还可以生成rtf文件,类似于doc文件,用于复制粘贴更好。后面我也这样去做了.不过发现了一个很头疼的问题他并不能像浏览器打开html文件一样能直接crtl加a,ctrl加c复制。

    因为光标没有在文档中,所以不能直接那样做。后面我尝试移动鼠标,先点击文档,再复制。这样做需要获取窗口句柄,获得窗口的坐标和宽度高度,再去移动鼠标点击。之后还需要将光标重新移动到之前的word文档中。很是麻烦。

    利用Python可以实现这样的功能的:

    模块:pywin32

    获取窗口句:

    1

    hwnd = win32gui.FindWindow(0, wdname)  # 父句柄

    点击功能:

    123

    # win32api.SendMessage(hwnd1, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, long_position)  # 模拟鼠标按下

    # win32api.SendMessage(hwnd1, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, long_position)  # 模拟鼠标弹起

    # pyautogui.click(posx, posy)

    最令我疯狂的坑是,获取的word窗口句柄一直不正确,找不到窗口。我换了其他窗口做测试都是可以的,不知道为什么就word不行。功力不够,哈哈哈。由于这些功能也比较麻烦,所以我只做到这里没往下做了。还是决定利用html加浏览器算了。

    二.基础知识储备及分享

    一.Python模拟键盘点击 实现ctrl+a,ctrl+c,ctrl+v

    1.需要的模块:pywin32

    好像2017以前叫做win32gui,win32api,win32con,之后改名了:pywin32

    Python3.8以上正确安装:

    1

    pip install pywin32

    错误安装:

    1

    pip install win32gui

    python - How to install 'win32gui' with `pip`? - Stack Overflow

    2.ctrl+c

    1.用途:

    这个的功能主要是用在:我们的用户选择文字,并执行程序的时候,先把文本给复制到系统剪切板。。

    def ctrl_c(self):
        import win32api
        import win32con
        #win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), win32con.KEYEVENTF_KEYUP, 0)#必须先释放ctrl ,因为快捷键有ctrl,人的释放可能太慢了,
        time.sleep(0.3)#此处必须休眠,不然不能复制
        win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), 0, 0)
        win32api.keybd_event(0x43, win32api.MapVirtualKey(0x43, 0), 0, 0)
        time.sleep(0.2)#此处必须休眠,不然不能复制
        win32api.keybd_event(0x43, win32api.MapVirtualKey(0x43, 0), win32con.KEYEVENTF_KEYUP, 0)
        win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), win32con.KEYEVENTF_KEYUP, 0)

    2.Bug与坑:

    在我调试程序的过程当中我发现ctrl+c这个功能一直实现不了。我想可能是程序执行太快了,没有反应。因此加了

    1

    time.sleep(0.3)#此处必须休眠,不然不能复制


    事实证明这样是对的,甚至当时间小于0.3秒的时候,系统仍没有control+C。

    3.ctrl+a,ctrl+c

    1.用途:

    用语打开html文件的时候,先看ctrl+a全选,在control加C复制选中到系统剪切板。

    def ctrl_a_c(self):
        # 复制ctrl+a,ctrl+c
        # 模拟按键 ctrl:0x11,a:0x41,c:0x43
        import win32api
        import win32con
        win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), 0, 0)
        win32api.keybd_event(0x41, win32api.MapVirtualKey(0x41, 0), 0, 0)

        win32api.keybd_event(0x41, win32api.MapVirtualKey(0x41, 0), win32con.KEYEVENTF_KEYUP, 0)

        win32api.keybd_event(0x43, win32api.MapVirtualKey(0x43, 0), 0, 0)

        win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), win32con.KEYEVENTF_KEYUP, 0)
        win32api.keybd_event(0x43, win32api.MapVirtualKey(0x43, 0), win32con.KEYEVENTF_KEYUP, 0)

    2.这个没有等待时间time.sleep(),但也没有出现bug。

    3.退格

    1.用途:

    我们已经将网页上的高亮代码复制下来了,在粘贴之前我们先需要删除已有的文本。


    def backspace(self):
        import win32api
        import win32con
        win32api.keybd_event(0x08, win32api.MapVirtualKey(0x08, 0), win32con.KEYEVENTF_KEYUP, 0)
        win32api.keybd_event(0x08, win32api.MapVirtualKey(0x08, 0), 0, 0)
        win32api.keybd_event(0x08, win32api.MapVirtualKey(0x08, 0), win32con.KEYEVENTF_KEYUP, 0)

    4.ctrl+v

    1.用途:

    删除之前的文本后,我们就可以粘贴高亮的代码了。


    def ctrl_v(self):
        import win32api
        import win32con
        win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), win32con.KEYEVENTF_KEYUP, 0)
        win32api.keybd_event(0x56, win32api.MapVirtualKey(0x56, 0), win32con.KEYEVENTF_KEYUP, 0)
        win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), 0, 0)
        win32api.keybd_event(0x56, win32api.MapVirtualKey(0x56, 0), 0, 0)
        win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), win32con.KEYEVENTF_KEYUP, 0)
        win32api.keybd_event(0x56, win32api.MapVirtualKey(0x56, 0), win32con.KEYEVENTF_KEYUP, 0)

    5. Python关于键盘控制鼠标控制的其他文章链接。

    (54条消息) python鼠标控制_用Python控制鼠标_cumtv80668的博客-CSDN博客

    (54条消息) python模拟按键操作_.Wen_Kai的博客-CSDN博客_python 按键

    (54条消息) python模拟按键网游_Python 实现键盘鼠标按键模拟_贾震东的博客-CSDN博客

    (54条消息) python模拟鼠标和键盘_huxiaoher的博客-CSDN博客_python 模拟鼠标和键盘输入

    二.获取剪切板内容

    上面的按键模拟是实现了 :将文本内容复制到粘贴板和将文本内容粘贴到word中(并没有涉及到变量。),

    而我们的程序需要在用户选择文本之后,CTRL+C复制下来,复制之后,我们便需要从剪切板得到文本,并赋给一个变量方便上传到网站上。或者就实现本地转换。

    那么我们该如何将剪切板的内容给一个变量呢?这就用到了下面的模块。

    1.需要的模块:pyperclip

    安装:

    1

     pip install pyperclip

    2.使用:

    pyperclip.copy(text)  把text字符串中的字符复制到剪切板

    text = pyperclip.paste()   把剪切板上的字符串复制到text

    3.参考链接。

    (54条消息) Python 将文本复制存入剪切板_Seven_OTM的博客-CSDN博客_python复制到剪贴板

    三.web自动化,爬虫。(网络高亮)

    0.用途:

    好了,现在我们已经从剪切板得到文本并赋值给一个变量了。接下来要做的就是把这个变量上传到网站上。并获取相应的结果。这就涉及到了自动化

    具体流程:

    用户选文本

    用户选择按下快捷键程序开始执行

    程序Ctrl+c复制文本到解切版。

    获取解切板的内容到变量中。

    -----------------------------------------

    创建浏览器驱动,

    打开对应网址,

    找到文本输入框的元素,

    发送文本到文本框,

    找到开始按钮元素,

    按下这个元素。

    网页进行了跳转。

    切换转换后的网页。

    剩下的就是ctrl+a+C复制了。

    ------------------------------------------

    最后退格删除原文本。

    Ctrl+v粘贴新的高亮代码。

    1.需要的模块:selenium

    安装:

    1

    pip install selenium

    2.学习自动化推荐

    原理与安装 | 白月黑羽 (byhy.net)

    内容十分详细,而且对应b站还有视频讲解。

    我只想说分享使一切皆有可能。白嫖是不可能白嫖的。

    3.创建浏览器驱动并打开网址(chrome浏览器)

    # 创建浏览器驱动
    #选择浏览器
    if self.dirverfilename == self.dirverfilename_chome:
        options = webdriver.ChromeOptions()
        prefs = {"profile.managed_default_content_settings.images": 2}  # 设置浏览器禁止加载图片
        options.add_experimental_option("prefs", prefs)
        # options.add_argument('--headless')# 关闭窗口后,无法复制
        options.add_argument('window-size=300x400')
        options.add_argument('--disable-gpu')  # 禁用显卡
        options.add_argument("--user-agent=Mozilla/5.0 HAHA")  # 替换UA

        chrome=webdriver.Chrome(chrome_options=options,service=Service(r'{}'.format(self.dirverfilename)))  # r 代表\号不转写,转义
        chrome.implicitly_wait(10)
        # options.add_argument('window-size=300x200')好像不行,用如下方法
        chrome.set_window_size(300, 400)
        # chrome.minimize_window()
        print("分辨率", chrome.get_window_size())

        # 网址
        chrome.get("https://highlightcode.com/")

    bug与坑:

    值得注意的是,这里并没有使用无头模式。就是没有把浏览器窗口给隐藏。

    因为我们是模拟按键ctrl+a+c,所以隐藏窗口之后不能复制到文本。

    但我尽量把窗口做了最小化。并且不影响复制的情况下。

    设置等待页面响应时间最长等待10秒。

    这里需要使用到浏览器驱动软件。打包程序给别人使用的时候,肯定要打包这个驱动软件的。因此我将这个驱动放在程序根目录下。

    4.找到页面元素并操作。

    找到文本框发送文本,找到开始按钮点击。

    # 输入文本
    # time.sleep(0.5)
    element_textedit = chrome.find_element(By.ID, "textarea")
    element_textedit.clear()
    element_textedit.send_keys(wenben_str)

    # 点击
    time.sleep(0.1)
    element = chrome.find_element(By.CSS_SELECTOR, "div>button")
    element.click()

    bug与坑:

    服务器响应可能没有那么快,但我们的操作可能太快了,所以需要sleep()一下。

    5.跳转标签页。

    # 跳转标签页
    time.sleep(0.3)  # 间隔太短,复制为空
    for handle in chrome.window_handles:
        # 先切换到该窗口
        chrome.switch_to.window(handle)
        # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
        if '复制即可' in chrome.title:
            # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
            break

    6.复制网页文本

    # 复制到剪切版
        # key_down(value, element=None) ——按下某个键盘上的键
        # key_up(value, element=None) ——松开某个键
        time.sleep(0.3)  # 间隔太短,复制为空
        element = chrome.find_element(By.CSS_SELECTOR, 'body > app-root > app-render > pre')
        action = ActionChains(chrome)
        action.key_down(Keys.CONTROL, element).send_keys("a").key_up(Keys.CONTROL, element).perform()  # ctrl+a
        # 如果不加元素element,也可以复制,不过格式不全
        '''
    不全的格式
        MainWindow::~MainWindow()
    {
        delete ui;
    }
    应该的格式
    1.
    MainWindow::~MainWindow()
    2.{
    3.    delete ui;
    4.}
        '''
        time.sleep(0.3)  # 间隔太短,复制为空
        action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()  # ctrl+c
        print('已复制')
        chrome.quit()

    bug与坑:

    这里需要注意的是全选的时候,如果没有绑定元素,则复制下来的文本没有123这样的行号与背景色。

    当然如果你不想要行号,你可以更改.

    7.Edge浏览器实现(接if)

    else:
        from selenium.webdriver.edge.service import Service
        options = webdriver.EdgeOptions()
        prefs = {"profile.managed_default_content_settings.images": 2}  # 设置浏览器禁止加载图片
        options.add_experimental_option("prefs", prefs)
        # options.add_argument('--headless')# 关闭窗口后,无法复制
        options.add_argument('window-size=300x400')
        options.add_argument('--disable-gpu')  # 禁用显卡
        options.add_argument("--user-agent=Mozilla/5.0 HAHA")  # 替换UA

        edge = webdriver.Edge(options=options,service=Service(r'{}'.format(self.dirverfilename)))  # r 代表\号不转写,转义
        edge.implicitly_wait(10)
        # options.add_argument('window-size=300x200')好像不行,用如下方法
        edge.set_window_size(300, 400)
        # edge.minimize_window()
        print("分辨率", edge.get_window_size())

        # 网址
        edge.get("https://highlightcode.com/")

        # 输入文本
        # time.sleep(0.5)
        element_textedit = edge.find_element(By.ID, "textarea")
        element_textedit.clear()
        element_textedit.send_keys(wenben_str)

        # 点击
        time.sleep(0.1)
        element = edge.find_element(By.CSS_SELECTOR, "div>button")
        element.click()

        # 跳转标签页
        time.sleep(0.3)  # 间隔太短,复制为空
        for handle in edge.window_handles:
            # 先切换到该窗口
            edge.switch_to.window(handle)
            # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
            if '复制即可' in edge.title:
                # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
                break

        # 复制到剪切版
        # key_down(value, element=None) ——按下某个键盘上的键
        # key_up(value, element=None) ——松开某个键
        time.sleep(0.3)  # 间隔太短,复制为空
        element = edge.find_element(By.CSS_SELECTOR, 'body > app-root > app-render > pre')
        action = ActionChains(edge)
        action.key_down(Keys.CONTROL, element).send_keys("a").key_up(Keys.CONTROL, element).perform()  # ctrl+a
        # 如果不加元素element,也可以复制,不过格式不全
        '''
    不全的格式
        MainWindow::~MainWindow()
    {
        delete ui;
    }
    应该的格式
    1.
    MainWindow::~MainWindow()
    2.{
    3.    delete ui;
    4.}
        '''
        time.sleep(0.3)  # 间隔太短,复制为空
        action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()  # ctrl+c
        print('已复制')
        edge.quit()

    #粘贴:
    self.ctrl_v()

    8.可参考的文章链接。

    (54条消息) 用python操作浏览器的三种方式_liu_xzhen的博客-CSDN博客_python 操作浏览器

    (57条消息) selenium ChromeDriver 中的 options 参数设置_从零开始的数据猿的博客-CSDN博客

    (57条消息) selenium add_argument 常用参数列表_小王同学--二蛋的博客-CSDN博客_options.add_argument

    (到此处网络高亮代码的过程就实现了。接下来是为了让等待时间更短而实现的本地代码高亮。)

    四.本地实现代码高亮

    0.用途:

    我们除了可以把获得的文本变量上传到网站上之外,也可以通过其他python库实现高亮。

    具体流程:

    用户选文本

    用户选择按下快捷键程序开始执行

    程序Ctrl+c复制文本到解切版。

    获取解切板的内容到变量中。

    ---------------------------------------------------------

    将剪切板的文本(代码)转换成 高亮的 html文件

    或者 rtf文件(word可读)

    用浏览器打开html文件并复制文本。

    用word软件打rtf文件并复制。(我并未完全实现)
    为什么使用rtf文件呢? 因为我发现 有时候 复制的html文件粘贴后 格式不,因此用了 rtf文件

    ----------------------------------------

    最后退格删除原文本。

    Ctrl+v粘贴新的高亮代码。

    1.需要的模块:pygments

    安装:

    1

    pip install pygments

    Pygments 文档 — Pygments

    2.生成html文件

    # 函数2
    def tohtml(self, code):
        # 自动判断语言
        lexer = guess_lexer(code)

        # 输出文件名,outfilename
        outpath = os.getcwd()
        outfilename = outpath + '\\temp.html'
        outcss = outpath + "\\temp.css"

        # 指定高亮风格,结合下拉框
        formatter = HtmlFormatter(style=self.codestyle)
        #其他参数:noclasses,nowrap,https://pygments.org/docs/formatters/
        if self.text_box==True:
            formatter.linenos = True

        # 获取css
        cssfile = open(outcss, "w")
        css = formatter.get_style_defs('.highlight')


        # print(css)
        cssfile.writelines(css)

        # 获取html
        htmlfile = open(outfilename, "w",encoding='utf-8')  # 直接打开一个文件,如果文件不存在则创建文件,
        # html = highlight(code, lexer,HtmlFormatter(), htmlfile)#可以直接写入,但我们需要链接csshtml,因此自己写
        html = highlight(code, lexer, formatter)
        htmlfile.write('<link rel="stylesheet" href="temp.css" type="text/css" /> \n')  # str写到文件中,write()并不会在str后加上一个换行符
        htmlfile.writelines(html)
        #print(html)

        # 关闭文件
        htmlfile.close()  # 关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 如果一个文件在关闭后还对其进行操作会产生ValueError
        cssfile.close()
        return outfilename  # 返回文件的字符路径,不是htmlfile文件

    3.打开html并复制

    # 函数4,复制html中的文本
    def get_htmlText(self, htmlfile):
        # 浏览器
        from selenium import webdriver
        from selenium.webdriver.chrome.service import Service
        from selenium.webdriver.common.by import By
        from selenium.webdriver.common.action_chains import ActionChains
        from selenium.webdriver.common.keys import Keys
        import time
        import os

        # 创建浏览器驱动
        # options.add_argument('--headless')# 关闭窗口后,无法复制
        if self.dirverfilename==self.dirverfilename_chome:
            chrome = webdriver.Chrome(service=Service(r'{}'.format(self.dirverfilename)))  # r 代表\号不转写,转义
            chrome.implicitly_wait(10)

            chrome.set_window_size(300, 400)
            # chrome.minimize_window()
            print("分辨率", chrome.get_window_size())

            # 网址,html文件
            chrome.get(htmlfile)

            # 复制文本
            action = ActionChains(chrome)
            action.key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform()  # ctrl+a
            action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()  # ctrl+c

        else:
            edge=webdriver.Edge(service=Service(r'{}'.format(self.dirverfilename_edge)))
            edge.implicitly_wait(10)

            edge.set_window_size(300,400)
            edge.get(htmlfile)
            action=ActionChains(edge)
            action.key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform()  # ctrl+a
            action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()  # ctrl+c

    注意:

    If else 判断采用哪个浏览器

    4.可参考的文章链接。

    (54条消息) Python编程:使用pygments高亮代码_彭世瑜的博客-CSDN博客_pygments

    (54条消息) 关于Python pygments库的简单介绍_九月家的敖烈的博客-CSDN博客_pygments

    (54条消息) ActionChains用法_liu_xzhen的博客-CSDN博客_action chains

    (54条消息) chrome浏览器的options参数_努力飞翔的笨鸟的博客-CSDN博客_chromeoptions

    Pygments 文档 — Pygments

    可用的格式参数(formatter)。

    可用的词法学家 — Pygments

    可生成html,rtf文件之外,还可以生成其他文件png...里面都有写。

    还可以控制高亮代码的风格参数。

    5.生成rtf文件,调用word操作(头疼的地方)

    5.0生成rtf文件

    # 2 转换成rtf文件
    # 函数3
    def totrf(self, code):
        # 自动判断语言
        lexer = guess_lexer(code)

        # 输出文件名,outfilename
        outpath = os.getcwd()
        outfilename = outpath + '\\temp.rtf'
        trffile = open(outfilename, 'w')  # 打开输入文件

        trf = highlight(code, lexer, RtfFormatter(), trffile)  # 参数:代码,语言,格式,输出文件

        # 关闭
        trffile.close()

        return outfilename  # 返回文件的字符路径,不是htmlfile文件

    5.1调用word软件复制文本

    需要安装的模块:pywin32

    可参考的文章链接:

    (54条消息) 教你怎么使用Python对word文档进行操作_「违规用户」的博客-CSDN博客_python word

    (54条消息) 【RTF】如何使用python读取RTF格式的文件_有人敲门knocky的博客-CSDN博客_python rtf

    (54条消息) python模块:win32com用法详解_xi4ojie的博客-CSDN博客_python win32com

    (54条消息) 排坑:运行win32com.client.Dispatch('Word.Application')和docx.Documents.Open()报错_zw05011的博客-CSDN博客_client.dispatch

    这里注意,当你的Rtf文档word中打开时,在程序里打开它,操作它,写入它会报错。

    (54条消息) Python如何操作office实现自动化?---win32com.client的运用_行走_的博客-CSDN博客_win32com.client

    (54条消息) python模块:win32com用法详解_chinajobs的博客-CSDN博客_win32.dispatch

    (54条消息) Python系统调用——运行其他程序_ssihc0的博客-CSDN博客_python操作其他程序

    1.打开word,寻找窗口句柄,定位,鼠标点击,插入光标法

    (54条消息) Spy++查看窗口类名和窗口标题名_Mokeri的博客-CSDN博客_查看窗口类名

    (54条消息) 学习python窗口句柄、后台鼠标点击等知识笔记_ANTARES!的博客-CSDN博客_python 后台点击

    (54条消息) python鼠标控制_用Python控制鼠标_cumtv80668的博客-CSDN博客

    (54条消息) 【Python】win32gui.Findwindow(parm1,parm2)窗口句柄获取_ztmajor的博客-CSDN博客_python win32gui.findwindow

    (54条消息) python win32api win32gui win32con 窗口句柄 发送消息 常用方法 键盘输入_青盏的博客-CSDN博客_python获取窗口句柄

    (54条消息) 如何找到当前桌面某一窗口上的类名_snlei的博客-CSDN博客_窗口类名在哪看

    2.直接最大化窗口,点击屏幕中间插入光标。

    #函数6,复制rtf文件,#必须将word 程序窗口最大化,并且此方法使光标改变了,之后不好再原word中直接复制
    def get_rtfText_1(self,rtffile):
        from win32com.client import DispatchEx
        from win32com.client import Dispatch
        import win32api

        # 打开word应用程序
        word = Dispatch('Word.Application')#此方法不能指定程序,有一些word程序打开rtf文件后,不能直接复制,就需要移动光标
        #word = DispatchEx('Word.Application') # 启动独立的进程
        word.Visible = 1  # 0后台运行,不显示
        word.DisplayAlerts = 0  # 不警告

        #打开文档
        doc = word.Documents.Open(FileName=rtffile, Encoding='gbk')

        #必须将word 程序窗口最大化
        #插入光标,不像html文件打开那样,可以直接复制
        #self.doClick()

        # 复制ctrl+a,ctrl+c
        ob.ctrl_a_c()

        #关闭
        doc.Close()
        word.Quit()

    # 函数5,插入光标,函数6将用到
    def doClick(self):
        import win32con
        import win32api,win32gui
        import pyautogui
        #获取窗口句柄:有一些窗口不能正常得到句柄

        # wdname = u'Microsoft Word 文档'
        # hwnd = win32gui.FindWindow(0, wdname)  # 父句柄
        # hwnd1 = win32gui.FindWindowEx(None,None,None, '网易有道词典')  # 子句柄FindWindowEx

        # 窗口大小
        # windowRec = win32gui.GetClientRect(hwnd1)  # 目标子句柄窗口的大小
        # print('windowRec',windowRec)#(676, 254, 1006, 724)#这个坐标不对

        #点击,无语了,不是我想要的点击
        #size = windowRec
        # sizew=size[2]
        # sizeh=size[3]
        # sizew=int(sizew/2)
        # sizeh=int(sizeh/2)
        # long_position = win32api.MAKELONG(340,170 )  # 模拟鼠标指针 传送到指定坐标 #long_position = win32api.MAKELONG(size[2]/2, size[3]/2)  # 模拟鼠标指针 传送到指定坐标
        # win32api.SendMessage(hwnd1, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, long_position)  # 模拟鼠标按下
        # win32api.SendMessage(hwnd1, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, long_position)  # 模拟鼠标弹起

        # 点击#上面的坐标不对,只好,将文档窗口最大化,点击屏幕中间了
        # posx=windowRec[0]
        # posy=windowRec[1]
        # sizew=windowRec[2]
        # sizeh=windowRec[3]
        # sizew=int(sizew/2)
        # sizeh=int(sizeh/2)
        # pyautogui.click(posx, posy)
        # print('已点击')

        #最大化后点击
        pinmupos=pyautogui.size()#屏幕大小
        print('pinmupos', pinmupos)
        posx=pinmupos.width/2;print(posx) #pinmupos.width()/2 不对
        posy=pinmupos.height/2;print(posy)
        pyautogui.click(posx,posy)

    3.其他想法。

    1.要用其他word程序,看看能不能 不用插入光标就能直接复制。

    # 函数7
    def get_rtfText_2(slef,rtffile):
        import win32api

        outpath=os.getcwd()
        rtfexefile=r'F:\1\金山文档\金山文档.exe'
        # rtfexefile=outpath+'\\wordpad.exe'
        print(rtfexefile)
        # 打开记事本程序,获得其句柄
        win32api.ShellExecute(0, 'open', rtfexefile,'F:/temp.rtf', '', 0)
        print(rtffile)

                #如何关闭

    太麻烦了,就不想写下去了。当时是写这个程序的,第2天,已经两天不按时吃饭,不按时睡觉,熬夜,身体扛不住了。看来还是要按时作息

    2.精疲力尽后,突然想到可以用浏览器打开pdf,所以将rtf文件转换为pdf再打开就好了
    #好吧,用浏览器打开pdf也不能直接复制,放弃了
    #新发现,浏览器打开pdf复制的文本粘贴到word中,并没有保留格式,所以这条路走不通

    #函数8,rtf文件转pdf
    def wordTopdf(self,doc_name, pdf_name):
        """
        :word文件转pdf
        :param doc_name word文件名称
        :param pdf_name 转换后pdf文件名称
        """
        import os
        import sys
        from win32com import client
        # pip install win32com
        try:
            word = client.DispatchEx("Word.Application")#后台进程
            if os.path.exists(pdf_name):
                os.remove(pdf_name)
            worddoc = word.Documents.Open(doc_name, ReadOnly=1)
            worddoc.SaveAs(pdf_name, FileFormat=17)
            worddoc.Close()
            word.Quit()
            return pdf_name
        except:
            return 1

    五.参数传递

    上述的函数我都定义在一个类中,并通过类的成员变量进行参数传递到成员函数中。

    在主函数中创建可视化界面,从可视化界面获得用户输入的参数,

    将这些参数赋给这个类的成员变量即可。


    class codelight():
        def __init__(self):
            self.codestyle = 'default'

            # 将一个浏览器驱动放到程序根目录下,用户就不用配置浏览器驱动了
            outpath = os.getcwd()
            self.dirverfilename_chome = outpath + '\\chromedriver.exe'
            self.dirverfilename_edge=outpath + '\\msedgedriver.exe'
            self.dirverfilename=self.dirverfilename_edge
            self.start_onlineget=False
            #标识,防止多次响应键盘快捷键
            self.runing_eventhandler=False
            #代码高亮文本框(bool
            self.text_box=False


    if __name__ == '__main__':
        # 实例化
        ob = codelight()

        #窗口
        from tkinter import *
        root = Tk()
        def destroy():
            root.destroy()

        root.wm_attributes('-topmost', 1)
        root.title("Tmaof代码高亮")
        root.geometry('200x280')
        root.protocol('WM_DELETE_WINDOW',destroy )

    #下拉框,获得方式,网络和本地
    from tkinter.ttk import *
    def getcodelightway(arg):
        if comb_getway.current()==0:
            ob.start_onlineget=True
        else:
            ob.start_onlineget=False

    comb_getway = Combobox(root, textvariable=StringVar(), values=['网络抓取', '本地生成'])
    comb_getway.place(relx=0, rely=0.6, relwidth=1)
    comb_getway.bind('<<ComboboxSelected>>', getcodelightway)  # 事件

    六.可视化界面的开发

    需要安装的模块:tkinter

    可参考的文章或链接:

    (54条消息) Python-Tkinter图形化界面设计(详细教程 )_王张飞的博客-CSDN博客_tkinter

    (54条消息) Tkinter小结 界面+快捷键设置_weixin_33834910的博客-CSDN博客

    (54条消息) Python - 编写可视化界面(Python+PyCharm+PyQt)_bailang_zhizun的博客-CSDN博客_python可视化界面编程工具

    (54条消息) 用 Python 打造属于自己的GUI图形化界面_Python中文社区的博客-CSDN博客

    (54条消息) tkinter库最全使用教程_千禧皓月的博客-CSDN博客_tkinter库

    (54条消息) tkinter响应窗口关闭事件_luxingyu329的博客-CSDN博客_tkinter关闭窗口事件

    七.为程序运行设置快捷键

    说明:

    快捷键有两种绑定方式,

    一种是为程序按钮绑定快捷键,这种方式只能在程序里起作用。

    另外一种可以采用键盘监听,可以全局使用.

    1.为按钮绑定快捷键。

    bind_all(哪个键, 对应的处理函数)

    参考文章。

    (54条消息) Tkinter小结 界面+快捷键设置_weixin_33834910的博客-CSDN博客

    # #下拉框,快捷键,不能全局,改用键盘监听。
    # def kuaijianjie(arg):
    #     if comb_kuai.current()==0:
    #         # btn.bind_all('<Control-f>',eventhandler)
    #         mythread.kuijianjie=0
    #     if comb_kuai.current()==1:
    #         # btn.bind_all('<Alt-x>', eventhandler)
    #         mythread.kuijianjie = 1
    #     if comb_kuai.current()==2:
    #         # btn.bind_all('<Alt-b>', eventhandler)
    #         mythread.kuijianjie = 2
    # var_kuai = StringVar()
    # comb_kuai = Combobox(root, textvariable=var_kuai, values=['ctrl+f', 'alt+x','alt+b'])
    # comb_kuai.place(relx=0, rely=0.8, relwidth=1)
    # comb_kuai.bind('<<ComboboxSelected>>', kuaijianjie)  # 事件

    2.键盘监听实现快捷键。

    可参考的文章。

    (54条消息) Python键盘监听-捕获输入的键值-鼠标监听_Meruz的博客-CSDN博客_python监听键盘输入

    1.问题。

    (54条消息) python监听、操作键盘鼠标库pynput详细教程_十年1一梦的博客-CSDN博客_pynput教程(我用了这篇文章中的函数发现有个致命问题。)

    #不能添加函数,键盘多次监听

    这就会导致用户在按下快捷键的时候,多次重复调用了同一个函数。也就是多次打开浏览器。进行文本复制上传等工作。

    from pynput import keyboard

    def on_activate_h():

        print('<ctrl>+<alt>+h pressed')#不能添加函数,键盘多次监听

    def on_activate_i():

        print('<ctrl>+<alt>+i pressed')

    def esc():

        print('<esc> pressed')

        return False

    def esc_shift():

        print('<esc>+<shift> pressed')

        raise Exception

    with keyboard.GlobalHotKeys({

            '<ctrl>+<alt>+h': on_activate_h,

            '<ctrl>+<alt>+i': on_activate_i,

            '<esc>':          esc,

            '<esc>+<shift>':  esc_shift}) as h:

        h.join()

    2.解决方法。

    1.换用其他的类裤来实现键盘监听。

    我也确实这样做了。不过发现效果不太理想。找不到一直监听的函数。

    2.添加标识符。就算多次调用,只要我标识符没有改变他就不会进入处理函数。

    这里我的处理方法是,用定时器。当调用这个函数的时候,触发定时器,三秒之后才才把标识符改变。这三秒内就算再次进入这个函数,也不会调用处理函数。

    from pynput import keyboard

    def on_activate_ctrl_x():
        #不能添加函数,键盘多次监听
        if ob.runing_eventhandler==False:#调用函数时会重复监听,所以可以添加标识符,不要重复调用eventhandler()
            ob.runing_eventhandler = True
            ob.eventhandler()
            # 标识,两秒后再把标识==false

    我自己写的一个定时器。
            mytim = mytimer()
            mytim.start()
            mytim.shurumiaoshu = 3
            print('x,e+<alt> pressed')
        else:
            return

    def esc():
        print('<esc> pressed')
        root.destroy()

    with keyboard.GlobalHotKeys({
        'x+<alt>': on_activate_ctrl_x,'e+<alt>': on_activate_ctrl_x,'<alt>+w': esc}) as h:
        h.join()

    定时器。


    class mytimer:
        def __init__(self, ):
            self.timerstop = False
            self.miaoshu = 0
            self.shurumiaoshu = None

        def start(self):
            def fun_timer():
                self.miaoshu += 1
                # print('self.timerstop=', self.timerstop)
                # print('当前秒数:', self.miaoshu)
                if self.timerstop == True:
                    return 'timeout'
                if self.miaoshu == self.shurumiaoshu:
                    # wanttodo:x
                    ob.runing_eventhandler = False
                    return 'timeout'

                # wanttodo:
                #print('Hello Timer!')
                global timer
                timer = threading.Timer(1, fun_timer)
                timer.start()

            timer = threading.Timer(1, fun_timer)
            timer.start()

        def stop(self):
            self.timerstop = True

    3.使用线程。

    为什么要使用线程?某些函数执行的时间较长。如果放在主线程中就会导致程序画面卡死。因此要放在子线程中。

    而此处的键盘监听函数是一直阻塞的,一直循环的,所以要放在线程中.

    可参考的文章。

    (54条消息) python:threading.Thread类的使用详解_啊啊啊西吧的博客-CSDN博客_python thread

    (57条消息) python:threading.Thread类的使用详解_啊啊啊西吧的博客-CSDN博客_python thread

    重写run

    #监听键盘事件线程,暂时不用
    import threading
    class MyThread(threading.Thread):
        def __init__(self,kuijianjie):
            super(MyThread, self).__init__()  # 重构run函数必须写
            self.kuijianjie = 1
            self.kuijianjie=kuijianjie

        def run(self):
            from pynput import keyboard
            def on_activate_h():
                print('<ctrl>+<alt> pressed')
                eventhandler()#调用函数,时会重复监听,所以可以添加标识符,不要重复调用eventhandler()
                return False

            def on_activate_i():
                print('<ctrl>+/ pressed')
                eventhandler()
                return False
            def esc():
                print('<esc> pressed')
                return False
            
            def esc_shift():
                print('<esc>+<shift> pressed')
                return False

            with keyboard.GlobalHotKeys({
                '<ctrl>+<alt>': on_activate_h,
                '<ctrl>+/': on_activate_i,
                '<esc>': esc,
                '<esc>+<shift>': esc_shift}) as h:
                h.join()

    直接调用函数。

    def run():
        print('test')
        from pynput import keyboard

        def on_activate_ctrl_x():
            #不能添加函数,键盘多次监听
            if ob.runing_eventhandler==False:#调用函数时会重复监听,所以可以添加标识符,不要重复调用eventhandler()
                ob.runing_eventhandler = True
                ob.eventhandler()
                # 标识,两秒后再把标识==false
                mytim = mytimer()
                mytim.start()
                mytim.shurumiaoshu = 3
                print('x,e+<alt> pressed')
            else:
                return

        def esc():
            print('<esc> pressed')
            root.destroy()

        with keyboard.GlobalHotKeys({
            'x+<alt>': on_activate_ctrl_x,'e+<alt>': on_activate_ctrl_x,'<alt>+w': esc}) as h:
            h.join()



    import threading
    thread=threading.Thread(target=run)
    thread.setDaemon(True)#守护线程
    thread.start()

    八.程序的打包发布

    1.可参考的文章。

    (54条消息) Pyinstaller(Python打包为exe文件)_coco3600的博客-CSDN博客

    (54条消息) 将python文件打包成exe可运行文件_菜鸟阿都的博客-CSDN博客_将python文件打包成exe可运行文件

    (54条消息) pyinstaller把Python打包成exe去掉黑窗doc窗口问题_wuminminmin的博客-CSDN博客_pyinstaller不显示黑窗口

    (54条消息) Pyinstaller 打包exe文件 取消dos窗口(黑框)_whalefall的博客-CSDN博客

    注意:

    1.我在函数中使多次使用import,这是一个不好的习惯。

    按照这位博主的说法。

    在这里提醒大家,在代码里面尽量不要用import,能from.....import....就尽量用这个,因为如果是import的话,在打包的时候,会将整个包都打包到exe里面,没有意义的增大了工具的大小!

    2.我在安装中遇到的问题。

    安装后程序的路径问题,

    根据这位博主的说法:

    exe文件生成

    • 如果程序打包过程没有报错,则会生成3个文件夹(有时候是2个),其中名为dist的文件夹中会有一个myfile.exe文件,运行一下,如果没有问题就打包成功,可以把这个exe文件单独拿出去用,其他的生成的文件夹可以删掉了

    我并没有在py文件目录下找到这个dist文件夹。

    只有一个pycache文件夹。没有exe文件。

    后经搜索发现这个文件夹在另外一个地方。

    去掉黑窗口:

    安装的时候参数命令加上:  -w

    浏览器驱动黑窗口存在的问题我无法解决。

    三.程序分享下载

    1.阿里云盘

    「代码高亮」https://www.aliyundrive.com/s/zDM23juXfQj 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

    阿里云盘分享 (aliyundrive.com)

    2.百度网盘

    链接:https://pan.baidu.com/s/1Q6YjRAWF3kYKkJI7lLB0iQ

    代码高亮_免费高速下载|百度网盘-分享无限制 (baidu.com)

    提取码:mur5

    3.csdn

    (57条消息) python代码高亮exe(帮助说明在我主页有)-其它文档类资源-CSDN文库

    4.注意事项:

    1.记事本等普通编辑框不能显示颜色,word等中才可以

    2.不要删除目录,保证3个exe文件在同一个文件夹下

    3.可以创建一个快捷方式,复制到桌面就好了(鼠标选择 代码高亮.exe 右键添加快捷方式)

    4.你可以在文档中选择一段代码,然后ctrl+a全部选中他,再按软件快捷键alt+x,程序就会把代码高光

    5.他运行的时候,你的光标不要移动到其他文本编辑框中

    四.源代码分享

    1.github

    Tmaof/python-_Code-highlighting: 可能会有同学使用word或者sdn来记笔记,在记笔记的过程中,难免少不了要敲代码。 这时候我们敲的代码不能高亮显示,就没有感觉,很头疼。 我也遇到了这样的问题,所以我想解决他。 最开始我是在网上搜可以代码高亮的网站: 代码在线高亮工具 | 将高亮美化的代码一键粘贴到 Word 或 OneNote 中 (highlightcode.com) 不过每次都这样把代码复制到网站上再粘贴下来很麻烦,能不能让它自动给我把代码复制下来,然后再传到网站上,再把网站上的内容给复制下来呢? 方法总归是有的. 我们可以通过Python实现模拟按键,ctrl加C,将文本复制到剪切板。再用Python将剪切板的内容给复制下来.然后用selenium库上传文本到网站上并读取高亮后的结果。最后再模拟模拟按键ctrl加V将高量后的代码粘贴到word中。 理论存在开始编写代码。 不过在编写代码之后,我们又会想到这样一个问题。每次上传到网站上再复制下来,都需要耗费几秒钟的时间。这个时间可能太长了,而且说不定哪一天这个网站它就关闭了。那能不能实现本地自己代码高亮呢? 经过查阅还真发现python提供了这样的代码高亮类库.pygments Pygments 文档 — Pygments 这个类库可以将代码高亮后生成各种格式的文件,我想到用它来生成html文件再用浏览器驱动自己打开并复制粘贴。 (github.com)

    2.csdn

    
    # -*- coding: utf-8 -*-
    # @Date    : 2022-3-27
    # @Author  : tian maofu
    from pygments import highlight
    from pygments.formatters.html import HtmlFormatter
    from pygments.formatters.rtf import RtfFormatter
    from pygments.lexers import guess_lexer
    import os
    import pyperclip
    import time
    import sys,io
    
    class codelight():
        def __init__(self):
            self.codestyle = 'default'
    
            # 将一个浏览器驱动放到程序根目录下,用户就不用配置浏览器驱动了
            outpath = os.getcwd()
            self.dirverfilename_chome = outpath + '\\chromedriver.exe'
            self.dirverfilename_edge=outpath + '\\msedgedriver.exe'
            self.dirverfilename=self.dirverfilename_edge
            self.start_onlineget=False
            #标识,防止多次响应键盘快捷键
            self.runing_eventhandler=False
            #代码高亮文本框(bool
            self.text_box=False
    
    
        # 网络得到
        def getcodelight_byonline(self):
            # 浏览器
            from selenium import webdriver
            from selenium.webdriver.chrome.service import Service
            from selenium.webdriver.common.by import By
            from selenium.webdriver.common.action_chains import ActionChains
            from selenium.webdriver.common.keys import Keys
            import time
    
            #ctrl+,c
            self.ctrl_c()
    
            #删除
            self.backspace()
    
            # 从剪切版获取文本
            wenben_str=self.getcode()
    
            # 创建浏览器驱动
            #选择浏览器
            if self.dirverfilename == self.dirverfilename_chome:
                options = webdriver.ChromeOptions()
                prefs = {"profile.managed_default_content_settings.images": 2}  # 设置浏览器禁止加载图片
                options.add_experimental_option("prefs", prefs)
                # options.add_argument('--headless')# 关闭窗口后,无法复制
                options.add_argument('window-size=300x400')
                options.add_argument('--disable-gpu')  # 禁用显卡
                options.add_argument("--user-agent=Mozilla/5.0 HAHA")  # 替换UA
    
                chrome=webdriver.Chrome(chrome_options=options,service=Service(r'{}'.format(self.dirverfilename)))  # r 代表\号不转写,转义
                chrome.implicitly_wait(10)
                # options.add_argument('window-size=300x200')好像不行,用如下方法
                chrome.set_window_size(300, 400)
                # chrome.minimize_window()
                print("分辨率", chrome.get_window_size())
    
                # 网址
                chrome.get("https://highlightcode.com/")
    
                # 输入文本
                # time.sleep(0.5)
                element_textedit = chrome.find_element(By.ID, "textarea")
                element_textedit.clear()
                element_textedit.send_keys(wenben_str)
    
                # 点击
                time.sleep(0.1)
                element = chrome.find_element(By.CSS_SELECTOR, "div>button")
                element.click()
    
                # 跳转标签页
                time.sleep(0.3)  # 间隔太短,复制为空
                for handle in chrome.window_handles:
                    # 先切换到该窗口
                    chrome.switch_to.window(handle)
                    # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
                    if '复制即可' in chrome.title:
                        # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
                        break
    
                # 复制到剪切版
                # key_down(value, element=None) ——按下某个键盘上的键
                # key_up(value, element=None) ——松开某个键
                time.sleep(0.3)  # 间隔太短,复制为空
                element = chrome.find_element(By.CSS_SELECTOR, 'body > app-root > app-render > pre')
                action = ActionChains(chrome)
                action.key_down(Keys.CONTROL, element).send_keys("a").key_up(Keys.CONTROL, element).perform()  # ctrl+a
                # 如果不加元素element,也可以复制,不过格式不全
                '''
            不全的格式
                MainWindow::~MainWindow()
            {
                delete ui;
            }
            应该的格式
            1.
            MainWindow::~MainWindow()
            2.{
            3.    delete ui;
            4.}
                '''
                time.sleep(0.3)  # 间隔太短,复制为空
                action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()  # ctrl+c
                print('已复制')
                chrome.quit()
    
            else:
                from selenium.webdriver.edge.service import Service
                options = webdriver.EdgeOptions()
                prefs = {"profile.managed_default_content_settings.images": 2}  # 设置浏览器禁止加载图片
                options.add_experimental_option("prefs", prefs)
                # options.add_argument('--headless')# 关闭窗口后,无法复制
                options.add_argument('window-size=300x400')
                options.add_argument('--disable-gpu')  # 禁用显卡
                options.add_argument("--user-agent=Mozilla/5.0 HAHA")  # 替换UA
    
                edge = webdriver.Edge(options=options,service=Service(r'{}'.format(self.dirverfilename)))  # r 代表\号不转写,转义
                edge.implicitly_wait(10)
                # options.add_argument('window-size=300x200')好像不行,用如下方法
                edge.set_window_size(300, 400)
                # edge.minimize_window()
                print("分辨率", edge.get_window_size())
    
                # 网址
                edge.get("https://highlightcode.com/")
    
                # 输入文本
                # time.sleep(0.5)
                element_textedit = edge.find_element(By.ID, "textarea")
                element_textedit.clear()
                element_textedit.send_keys(wenben_str)
    
                # 点击
                time.sleep(0.1)
                element = edge.find_element(By.CSS_SELECTOR, "div>button")
                element.click()
    
                # 跳转标签页
                time.sleep(0.3)  # 间隔太短,复制为空
                for handle in edge.window_handles:
                    # 先切换到该窗口
                    edge.switch_to.window(handle)
                    # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
                    if '复制即可' in edge.title:
                        # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
                        break
    
                # 复制到剪切版
                # key_down(value, element=None) ——按下某个键盘上的键
                # key_up(value, element=None) ——松开某个键
                time.sleep(0.3)  # 间隔太短,复制为空
                element = edge.find_element(By.CSS_SELECTOR, 'body > app-root > app-render > pre')
                action = ActionChains(edge)
                action.key_down(Keys.CONTROL, element).send_keys("a").key_up(Keys.CONTROL, element).perform()  # ctrl+a
                # 如果不加元素element,也可以复制,不过格式不全
                '''
            不全的格式
                MainWindow::~MainWindow()
            {
                delete ui;
            }
            应该的格式
            1.
            MainWindow::~MainWindow()
            2.{
            3.    delete ui;
            4.}
                '''
                time.sleep(0.3)  # 间隔太短,复制为空
                action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()  # ctrl+c
                print('已复制')
                edge.quit()
    
    
            #粘贴:
            self.ctrl_v()
    
        #本地生成:
        # 将剪切板的文本(代码)转换成 高亮的 html文件 或者 rtf文件(word可度)
        # 再将文本读到剪切版
    
        # 函数1,获取剪切板代码
        def getcode(self):
            # 从剪切版获取文本
            code = pyperclip.paste()  # 从剪切版获取文本
            code = '''{}'''.format(code)
            #print(code)
            return code
    
            # 需要高亮的语言
            # 手动
            # lexer = PythonLexer()
            # lexer = get_lexer_by_name("python")#(二选一即可)
            # 自动判断语言
            # lexer = guess_lexer(code)
    
        # 两种方式获取高亮代码
    
        # 1 转换成html文件
        # 函数2
        def tohtml(self, code):
            # 自动判断语言
            lexer = guess_lexer(code)
    
            # 输出文件名,outfilename
            outpath = os.getcwd()
            outfilename = outpath + '\\temp.html'
            outcss = outpath + "\\temp.css"
    
            # 指定高亮风格,结合下拉框
            formatter = HtmlFormatter(style=self.codestyle)
            #其他参数:noclasses,nowrap,https://pygments.org/docs/formatters/
            if self.text_box==True:
                formatter.linenos = True
    
            # 获取css
            cssfile = open(outcss, "w")
            css = formatter.get_style_defs('.highlight')
    
    
            # print(css)
            cssfile.writelines(css)
    
            # 获取html
            htmlfile = open(outfilename, "w",encoding='utf-8')  # 直接打开一个文件,如果文件不存在则创建文件,
            # html = highlight(code, lexer,HtmlFormatter(), htmlfile)#可以直接写入,但我们需要链接css到html中,因此自己写
            html = highlight(code, lexer, formatter)
            htmlfile.write('<link rel="stylesheet" href="temp.css" type="text/css" /> \n')  # 把str写到文件中,write()并不会在str后加上一个换行符
            htmlfile.writelines(html)
            #print(html)
    
            # 关闭文件
            htmlfile.close()  # 关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 如果一个文件在关闭后还对其进行操作会产生ValueError
            cssfile.close()
            return outfilename  # 返回文件的字符路径,不是htmlfile文件
    
        '''
        # 2 转换成rtf文件
        # 函数3
        def totrf(self, code):
            # 自动判断语言
            lexer = guess_lexer(code)
    
            # 输出文件名,outfilename
            outpath = os.getcwd()
            outfilename = outpath + '\\temp.rtf'
            trffile = open(outfilename, 'w')  # 打开输入文件
    
            trf = highlight(code, lexer, RtfFormatter(), trffile)  # 参数:代码,语言,格式,输出文件
    
            # 关闭
            trffile.close()
    
            return outfilename  # 返回文件的字符路径,不是htmlfile文件
        '''
        # 函数4,复制html中的文本
        def get_htmlText(self, htmlfile):
            # 浏览器
            from selenium import webdriver
            from selenium.webdriver.chrome.service import Service
            from selenium.webdriver.common.by import By
            from selenium.webdriver.common.action_chains import ActionChains
            from selenium.webdriver.common.keys import Keys
            import time
            import os
    
            # 创建浏览器驱动
            # options.add_argument('--headless')# 关闭窗口后,无法复制
            if self.dirverfilename==self.dirverfilename_chome:
                chrome = webdriver.Chrome(service=Service(r'{}'.format(self.dirverfilename)))  # r 代表\号不转写,转义
                chrome.implicitly_wait(10)
    
                chrome.set_window_size(300, 400)
                # chrome.minimize_window()
                print("分辨率", chrome.get_window_size())
    
                # 网址,html文件
                chrome.get(htmlfile)
    
                # 复制文本
                action = ActionChains(chrome)
                action.key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform()  # ctrl+a
                action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()  # ctrl+c
    
            else:
                edge=webdriver.Edge(service=Service(r'{}'.format(self.dirverfilename_edge)))
                edge.implicitly_wait(10)
    
                edge.set_window_size(300,400)
                edge.get(htmlfile)
                action=ActionChains(edge)
                action.key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform()  # ctrl+a
                action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()  # ctrl+c
    
        '''
        # 函数5,插入光标,函数6将用到
        def doClick(self):
            import win32con
            import win32api,win32gui
            import pyautogui
            #获取窗口句柄:有一些窗口不能正常得到句柄
    
            # wdname = u'Microsoft Word 文档'
            # hwnd = win32gui.FindWindow(0, wdname)  # 父句柄
            # hwnd1 = win32gui.FindWindowEx(None,None,None, '网易有道词典')  # 子句柄FindWindowEx
    
            # 窗口大小
            # windowRec = win32gui.GetClientRect(hwnd1)  # 目标子句柄窗口的大小
            # print('windowRec',windowRec)#(676, 254, 1006, 724)#这个坐标不对
    
            #点击,无语了,不是我想要的点击
            #size = windowRec
            # sizew=size[2]
            # sizeh=size[3]
            # sizew=int(sizew/2)
            # sizeh=int(sizeh/2)
            # long_position = win32api.MAKELONG(340,170 )  # 模拟鼠标指针 传送到指定坐标 #long_position = win32api.MAKELONG(size[2]/2, size[3]/2)  # 模拟鼠标指针 传送到指定坐标
            # win32api.SendMessage(hwnd1, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, long_position)  # 模拟鼠标按下
            # win32api.SendMessage(hwnd1, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, long_position)  # 模拟鼠标弹起
    
            # 点击#上面的坐标不对,只好,将文档窗口最大化,点击屏幕中间了
            # posx=windowRec[0]
            # posy=windowRec[1]
            # sizew=windowRec[2]
            # sizeh=windowRec[3]
            # sizew=int(sizew/2)
            # sizeh=int(sizeh/2)
            # pyautogui.click(posx, posy)
            # print('已点击')
    
            #最大化后点击
            pinmupos=pyautogui.size()#屏幕大小
            print('pinmupos', pinmupos)
            posx=pinmupos.width/2;print(posx) #pinmupos.width()/2 不对
            posy=pinmupos.height/2;print(posy)
            pyautogui.click(posx,posy)
    
    
        #函数6,复制rtf文件,#必须将word 程序窗口最大化,并且此方法使光标改变了,之后不好再原word中直接复制
        def get_rtfText_1(self,rtffile):
            from win32com.client import DispatchEx
            from win32com.client import Dispatch
            import win32api
    
            # 打开word应用程序
            word = Dispatch('Word.Application')#此方法不能指定程序,有一些word程序打开rtf文件后,不能直接复制,就需要移动光标
            #word = DispatchEx('Word.Application') # 启动独立的进程
            word.Visible = 1  # 0后台运行,不显示
            word.DisplayAlerts = 0  # 不警告
    
            #打开文档
            doc = word.Documents.Open(FileName=rtffile, Encoding='gbk')
    
            #必须将word 程序窗口最大化
            #插入光标,不像html文件打开那样,可以直接复制
            #self.doClick()
    
            # 复制ctrl+a,ctrl+c
            ob.ctrl_a_c()
    
            #关闭
            doc.Close()
            word.Quit()
    
        # 函数7
        def get_rtfText_2(slef,rtffile):
            import win32api
    
            outpath=os.getcwd()
            rtfexefile=r'F:\1\金山文档\金山文档.exe'
            # rtfexefile=outpath+'\\wordpad.exe'
            print(rtfexefile)
            # 打开记事本程序,获得其句柄
            win32api.ShellExecute(0, 'open', rtfexefile,'F:/temp.rtf', '', 0)
            print(rtffile)
    
                    #如何关闭
    
    
        #函数8,rtf文件转pdf
        def wordTopdf(self,doc_name, pdf_name):
            """
            :word文件转pdf
            :param doc_name word文件名称
            :param pdf_name 转换后pdf文件名称
            """
            import os
            import sys
            from win32com import client
            # pip install win32com
            try:
                word = client.DispatchEx("Word.Application")#后台进程
                if os.path.exists(pdf_name):
                    os.remove(pdf_name)
                worddoc = word.Documents.Open(doc_name, ReadOnly=1)
                worddoc.SaveAs(pdf_name, FileFormat=17)
                worddoc.Close()
                word.Quit()
                return pdf_name
            except:
                return 1
    '''
        def ctrl_c(self):
            import win32api
            import win32con
            #win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), win32con.KEYEVENTF_KEYUP, 0)#必须先释放ctrl ,因为快捷键有ctrl,人的释放可能太慢了,
            time.sleep(0.3)#此处必须休眠,不然不能复制
            win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), 0, 0)
            win32api.keybd_event(0x43, win32api.MapVirtualKey(0x43, 0), 0, 0)
            time.sleep(0.2)#此处必须休眠,不然不能复制
            win32api.keybd_event(0x43, win32api.MapVirtualKey(0x43, 0), win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), win32con.KEYEVENTF_KEYUP, 0)
    
    
    
        def ctrl_a_c(self):
            # 复制ctrl+a,ctrl+c
            # 模拟按键 ctrl:0x11,a:0x41,c:0x43
            import win32api
            import win32con
            win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), 0, 0)
            win32api.keybd_event(0x41, win32api.MapVirtualKey(0x41, 0), 0, 0)
    
            win32api.keybd_event(0x41, win32api.MapVirtualKey(0x41, 0), win32con.KEYEVENTF_KEYUP, 0)
    
            win32api.keybd_event(0x43, win32api.MapVirtualKey(0x43, 0), 0, 0)
    
            win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x43, win32api.MapVirtualKey(0x43, 0), win32con.KEYEVENTF_KEYUP, 0)
    
        def backspace(self):
            import win32api
            import win32con
            win32api.keybd_event(0x08, win32api.MapVirtualKey(0x08, 0), win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x08, win32api.MapVirtualKey(0x08, 0), 0, 0)
            win32api.keybd_event(0x08, win32api.MapVirtualKey(0x08, 0), win32con.KEYEVENTF_KEYUP, 0)
    
        def ctrl_v(self):
            import win32api
            import win32con
            win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x56, win32api.MapVirtualKey(0x56, 0), win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), 0, 0)
            win32api.keybd_event(0x56, win32api.MapVirtualKey(0x56, 0), 0, 0)
            win32api.keybd_event(0x11, win32api.MapVirtualKey(0x11, 0), win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x56, win32api.MapVirtualKey(0x56, 0), win32con.KEYEVENTF_KEYUP, 0)
    
        def getcodelight_byself(self):
            ob.ctrl_c()
            # time.sleep(0.7)#不用休眠
    
            #print('deleter')
            # 删除选中文本
            ob.backspace()
    
            #print('html')
            # 从剪切板得到代码
            code = ob.getcode()
            # rtffile=ob.totrf(code)#生成rtf
            # ob.get_rtfText_2(rtffile)
            htmlfile = ob.tohtml(code)
            ob.get_htmlText(htmlfile)
    
            # 粘贴新代码
            ob.ctrl_v()
    
        # 快捷键函数
        def eventhandler(self):
            self.runing_eventhandler = True
            if self.start_onlineget==True:
                self.getcodelight_byonline()#网络获取
            else:
                self.getcodelight_byself()
            #print(' def eventhandler(self):')
    
    
    
    class mytimer:
        def __init__(self, ):
            self.timerstop = False
            self.miaoshu = 0
            self.shurumiaoshu = None
    
        def start(self):
            def fun_timer():
                self.miaoshu += 1
                # print('self.timerstop=', self.timerstop)
                # print('当前秒数:', self.miaoshu)
                if self.timerstop == True:
                    return 'timeout'
                if self.miaoshu == self.shurumiaoshu:
                    # wanttodo:x
                    ob.runing_eventhandler = False
                    return 'timeout'
    
                # wanttodo:
                #print('Hello Timer!')
                global timer
                timer = threading.Timer(1, fun_timer)
                timer.start()
    
            timer = threading.Timer(1, fun_timer)
            timer.start()
    
        def stop(self):
            self.timerstop = True
    
    
    '''
    #监听键盘事件线程,暂时不用
    import threading
    class MyThread(threading.Thread):
        def __init__(self,kuijianjie):
            super(MyThread, self).__init__()  # 重构run函数必须写
            self.kuijianjie = 1
            self.kuijianjie=kuijianjie
    
        def run(self):
            from pynput import keyboard
            def on_activate_h():
                print('<ctrl>+<alt> pressed')
                eventhandler()#调用函数,时会重复监听,所以可以添加标识符,不要重复调用eventhandler()
                return False
    
            def on_activate_i():
                print('<ctrl>+/ pressed')
                eventhandler()
                return False
            def esc():
                print('<esc> pressed')
                return False
            
            def esc_shift():
                print('<esc>+<shift> pressed')
                return False
    
            with keyboard.GlobalHotKeys({
                '<ctrl>+<alt>': on_activate_h,
                '<ctrl>+/': on_activate_i,
                '<esc>': esc,
                '<esc>+<shift>': esc_shift}) as h:
                h.join()
    
            
    '''
    
    
    if __name__ == '__main__':
        # 实例化
        ob = codelight()
    
        #窗口
        from tkinter import *
        root = Tk()
        def destroy():
            root.destroy()
    
        root.wm_attributes('-topmost', 1)#置顶
        root.title("MaofU代码高亮")
        root.geometry('200x280')
        root.protocol('WM_DELETE_WINDOW',destroy )
    
        #按钮
        #btn = Button(root, text='快捷键ctrl+f')
        #btn.bind_all('<Control-f>', eventhandler)
        #btn.pack()#不显示
    
        # 上面的快捷键不能全局
        # 采用监听
        # mythread = MyThread(1)
        # mythread.start()#不能退出
        def run():
            print('test')
            from pynput import keyboard
    
            def on_activate_ctrl_x():
                #不能添加函数,键盘多次监听
                if ob.runing_eventhandler==False:#调用函数时会重复监听,所以可以添加标识符,不要重复调用eventhandler()
                    ob.runing_eventhandler = True
                    ob.eventhandler()
                    # 标识,两秒后再把标识==false
                    mytim = mytimer()
                    mytim.start()
                    mytim.shurumiaoshu = 3
                    print('x,e+<alt> pressed')
                else:
                    return
    
            def esc():
                print('<esc> pressed')
                root.destroy()
    
            with keyboard.GlobalHotKeys({
                'x+<alt>': on_activate_ctrl_x,'e+<alt>': on_activate_ctrl_x,'<alt>+w': esc}) as h:
                h.join()
    
        import threading
        thread=threading.Thread(target=run)
        thread.setDaemon(True)#守护线程
        thread.start()
    
        #下拉框,获得方式,网络和本地
        from tkinter.ttk import *
        def getcodelightway(arg):
            if comb_getway.current()==0:
                ob.start_onlineget=True
            else:
                ob.start_onlineget=False
    
        comb_getway = Combobox(root, textvariable=StringVar(), values=['网络抓取', '本地生成'])
        comb_getway.place(relx=0, rely=0.6, relwidth=1)
        comb_getway.bind('<<ComboboxSelected>>', getcodelightway)  # 事件
    
        #高亮风格
        def calc(arg):#处理函数
            dic ={0: 'default', 1: 'emacs', 2: 'friendly', 3:'colorful',4:'autumn',5:'murphy',6:'manni',7:'monokai',8:'perldoc',9:'pastie',10:'borland',11:'trac',12:'native',13:'fruity',14:'bw',15:'vim',16:'vs',17:'tango',18:'rrt',19:'xcode',20:'igor',
                  21:'paraiso-light',22:'paraiso-dark',23:'lovelace',24:'algol',25:'algol_nu',26:'arduino',27:'rainbow_dash',28:'abap'}
            var = dic[comb.current()]
            ob.codestyle=var
            print(ob.codestyle)
    
        #下拉框,代码风格
        var = StringVar()
        comb = Combobox(root, textvariable=var, values=['default', 'emacs', 'friendly', 'colorful','autumn','murphy','manni','monokai','perldoc','pastie',
    'borland' ,"trac",
    "native",
    "fruity",
    "bw",
    "vim",
    "vs",
    "tango",
    "rrt",
    "xcode",
    "igor",
    
    "paraiso-light",
    "paraiso-dark",
    "lovelace",
    "algol",
    "algol_nu",
    "arduino",
    "rainbow_dash",
    "abap"
    ])
        comb.place(relx=0, rely=0.7, relwidth=1)
        comb.bind('<<ComboboxSelected>>', calc)#事件
    
    
        #下拉框,浏览器
        def selectdiver(arg):
            if comb_dirver.current()==0:
                ob.dirverfilename=ob.dirverfilename_chome
            else:
                ob.dirverfilename=ob.dirverfilename_edge
    
    
        var_dirver = StringVar()
        comb_dirver = Combobox(root, textvariable=var_dirver, values=['谷歌chome浏览器','微软edge浏览器'])
        comb_dirver.place(relx=0, rely=0.8, relwidth=1)
        comb_dirver.bind('<<ComboboxSelected>>', selectdiver)  # 事件
    
        #下拉框,高亮文本框
        def sel_textbox(arg):
            if comb_textbox.current()==0:
                ob.text_box=True
            else:
                ob.text_box=False
    
        comb_textbox = Combobox(root, textvariable=StringVar(), values=['开启高亮文本框', '不开启高亮文本框'])
        comb_textbox.place(relx=0, rely=0.9, relwidth=1)
        comb_textbox.bind('<<ComboboxSelected>>',sel_textbox )  # 事件
    
        # 标签
        lb = Label(root,text='下拉框1:选择获取方式(默认本地)\n下拉框2:选择高亮风格\n下拉框3:选择浏览器(默认edge)\n下拉框4:代码高亮文本框(默认不开启)(文本框可以在word,csdn等中调整)\n(请保持程序根目录下的浏览器驱动与你的浏览器版本一致,更换时,驱动名字要与之前的一致)\n\n'
                        '快捷键执行:(alt+x,alt+e)(程序可最小化)\n快捷退出:alt+w\n1.程序工作时,请保持光标在需要工作的位置2.粘贴地方不同,文本格式不同',
                   font=("楷体", 13))
        lb.place(relx=0, rely=0.1)
        lb.pack()
    
        # 设置label标签
        link =Label(root,text='更多帮助点击这里呀!!!!!!!!',font=('楷体', 13))
        link.place(relx=0, rely=0.5)
        # 此处必须注意,绑定的事件函数中必须要包含event参数
        import webbrowser
        def open_url(event):
            webbrowser.open("https://blog.csdn.net/qq_62595450?spm=1000.2115.3001.5343", new=0)
        # 绑定label单击事件
        link.bind("<Button-1>", open_url)
    
        root.mainloop()
    
        # #下拉框,快捷键,不能全局,改用键盘监听。
        # def kuaijianjie(arg):
        #     if comb_kuai.current()==0:
        #         # btn.bind_all('<Control-f>',eventhandler)
        #         mythread.kuijianjie=0
        #     if comb_kuai.current()==1:
        #         # btn.bind_all('<Alt-x>', eventhandler)
        #         mythread.kuijianjie = 1
        #     if comb_kuai.current()==2:
        #         # btn.bind_all('<Alt-b>', eventhandler)
        #         mythread.kuijianjie = 2
        # var_kuai = StringVar()
        # comb_kuai = Combobox(root, textvariable=var_kuai, values=['ctrl+f', 'alt+x','alt+b'])
        # comb_kuai.place(relx=0, rely=0.8, relwidth=1)
        # comb_kuai.bind('<<ComboboxSelected>>', kuaijianjie)  # 事件
    
    
    
    
    #说明:为实现复制trf文件内容,我写了   def get_rtfText_1(self,rtffile):    def get_rtfText_2(self,rtffile):
    #两个函数,利用Word软件打开rtf,并复制,可是问题在于并不能直接复制(因为光标没在word中),因此还想了去移动光标,可是还是存在许多问题
    #
    #精疲力尽后,突然想到可以用浏览器打开pdf,所以将rtf文件转换为pdf再打开就好了
    #好吧,用浏览器打开pdf也不能直接复制,放弃了
    #新发现,浏览器打开pdf复制的文本粘贴到word中,并没有保留格式,所以这条路走不通
    
    #为什么使用rtf文件呢? 因为我发现 有时候 复制的html文件粘贴后 格式不对,因此用了 rtf文件
    
    #注意,浏览器要与浏览器驱动版本差不多
    
    # 其他,查看支持的风格
    '''
    
    from pygments.styles import STYLE_MAP
    
    for key in STYLE_MAP.keys():
        print(key)
        
    """    
    default
    emacs
    friendly
    colorful
    autumn
    murphy
    manni
    monokai
    perldoc
    
    pastie
    borland
    
    trac
    native
    fruity
    bw
    vim
    vs
    tango
    rrt
    xcode
    igor
    
    paraiso-light
    paraiso-dark
    lovelace
    algol
    algol_nu
    arduino
    rainbow_dash
    abap
    """
    
    
    
    类 RtfFormatter
    短名称
    rtf
    
    文件名
    *.rtf
    
    将标记格式化为 RTF 标记。此格式化程序会自动输出包含颜色信息和其他有用内容的完整 RTF 文档。非常适合复制和粘贴到Microsoft(R)Word(R)文档中。
    
    请注意,和选项将被忽略。RTF 格式本身是 ASCII,但由于使用了转义序列,因此可以正确处理 unicode 字符。encodingoutencoding
    
    0.6 版中的新功能。
    
    接受的其他选项:
    
    风格
    要使用的样式可以是字符串或 Style 子类(默认:)。'default'
    
    字体
    使用的字体系列,例如 。默认为一些应该具有固定宽度的通用字体。Bitstream Vera Sans
    
    字体大小
    所用字体的大小。大小以半点为单位指定。默认值为 24 个半点,字体大小为 12。
    
    2.0 版中的新功能。
    '''
    

    五.分享:英语四六级,专业四级八级,历年真题听力视频-中英双字幕+日语N3(双字幕)

    1.简介:

    假期的时候用qt写了个制作中英双字幕视频的程序,

    并在B站发布了这些视频.如果正好有需要的同学可以去看看哟!

    由于,是第一次写的程序,代码比较凌乱,暂不分享了.

    2.视频链接:

    1.六级

    CET6 全国六级听力考试(中英双字幕)(翻译)_哔哩哔哩_bilibili

    【六级听力历年合集】2021年06月六级听力第二套精听(优化版,一周二更)_哔哩哔哩_bilibili

    2.四级

    CET4 全国大学英语 四级听力考试(中英双字幕)(翻译)(2015年至今)_哔哩哔哩_bilibili

    【四级听力】历年真题 大合集(中英双字幕:翻译)(优化版)_哔哩哔哩_bilibili

    专四

    3.TEM4 英语专四 听力真题(2009~2021年合集) (中英双字幕)(翻译)_哔哩哔哩_bilibili

    专八

    4.TEM 英语专八听力真题(2009~2021年合集) (中英双字幕)(翻译)_哔哩哔哩_bilibili

    日语n3

    5.日语N3听力历年真题(双字幕)(翻译)_哔哩哔哩_bilibili

    6.其他:

    【TED演讲合集】_哔哩哔哩_bilibili

    [B站首发] 经典影视学外语 (中英语言)练习口语和听力(有盲听部分)千寻_哔哩哔哩_bilibili

    [B站首发] 经典影视学外语 (中英日三国语言)练习口语和听力(有盲听部分)(更新ing)5_哔哩哔哩_bilibili

    六.后记(转载注明出处)

    1.感谢:

    谢谢各位大佬免费分享的各类编程知识!!!

    2.小白刚上大一,经验也不是很足,文章中出错的,代码不好的...还请多多担待哈!

    3.以前看别人写文章都说:码字不易.今天我是体会到了!

    如果文章的某些部分对你有帮助,也请多多支持一下.只为了能帮到更多的人呀!

    4.小白温馨提醒:各位要按时休息,吃饭呀.这几天写程序入迷了,熬夜,不按时吃饭,搞的身体很难受...这样不行呀

    5.谢谢观看!

    展开全文
  • 你绝对喜欢的哦,源码灰常灰常简洁
  • 内容索引:脚本资源,Ajax/JavaScript,代码高亮 自己动手写了个代码高亮库,附有使用实例,还没有起名字,自我感觉良好。可自动识别HTML/CSS/JS代码,同时也能高亮显示HTML网页中嵌套的CSS和JS,有些判断并不是很严谨...
  • 微信公众号代码高亮插入器,支持代码行号,多种主题选择。 完全融合微信公众平台文章编辑器的代码高亮插入器。功能比官方更加强大,除了插入高亮代码外,还支援自选主题和行内代码的插入。最近更新记录:- 2.0.1 ...
  • 代码高亮示例代码 本项目是使用React + prismjs实现代码高亮示例。 使用 项目需要先全局安装依赖库。 npm install -g umi 然后Clone项目在运行 git clone https://github.com/scfido/codeHighlighter cd ...
  • 代码高亮网站收集

    千次阅读 2009-12-14 12:38:00
    codetie.com 代码分享、高亮显示网站地址:http://www.codetie.com/paste/index测试的效果如下:代码发芽网 多种语言支持,高亮支持blog网站地址:http://fayaa.com/code/home/测试的效果如下: 

    codetie.com 代码分享、高亮显示
    网站地址:http://www.codetie.com/paste/index

    测试的效果如下:

    代码发芽网 多种语言支持,高亮支持blog
    网站地址:http://fayaa.com/code/home/

    测试的效果如下:

     

     

    展开全文
  • 主要介绍了如何实现正则表达式的JavaScript的代码高亮方法,需要的朋友可以参考下
  • 推荐Discuz!5的PHP代码高亮显示与实现可运行代码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 228,715
精华内容 91,486
关键字:

代码高亮网站