最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python實(shí)現(xiàn)Markdown編輯器的示例詳解

 更新時(shí)間:2025年08月04日 10:09:47   作者:Kyln.Wu  
這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)Markdown編輯器,并且可以左邊寫 Markdown,右邊實(shí)時(shí)變成漂亮網(wǎng)頁(yè),感興趣的小伙伴可以了解下

故事開(kāi)場(chǎng)

深夜 11 點(diǎn),你要給項(xiàng)目寫一份 README。

Typora 突然收費(fèi)、VS Code 插件又卡頓,每次改一行都得 Ctrl+S → 切瀏覽器 → F5,循環(huán)十次,心態(tài)爆炸。

這時(shí),你從桌面角落掏出“小白瑞士軍刀”——markdown_editor.py

雙擊,彈出迷你雙欄窗口:左邊寫 Markdown,右邊實(shí)時(shí)變成漂亮網(wǎng)頁(yè);寫完直接 Ctrl+S 導(dǎo)出 .md,三秒搞定。

痛點(diǎn)解決:再也不用“寫-保存-刷新”三連,所見(jiàn)即所得,熬夜少一點(diǎn)。

完整代碼速覽

#!/usr/bin/python
# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import font, filedialog, messagebox as mbox
from markdown2 import Markdown
from tkhtmlview import HTMLLabel

class Window(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.font = font.Font(family="Helvetica", size=14)
        self.init_window()

    def onChange(self, event):
        self.inputeditor.edit_modified(0)
        md2html = Markdown()
        self.outputbox.set_html(md2html.convert(
            self.inputeditor.get("1.0", tk.END)))

    def openfile(self):
        filename = filedialog.askopenfilename(
            filetypes=[("Markdown", "*.md"), ("Text", "*.txt"), ("All", "*.*")])
        if filename:
            try:
                self.inputeditor.delete("1.0", tk.END)
                self.inputeditor.insert(tk.END, open(filename, "r").read())
            except Exception:
                mbox.showerror("Error", f"{filename} cannot be opened!")

    def savefile(self):
        filedata = self.inputeditor.get("1.0", tk.END)
        filename = filedialog.asksaveasfilename(
            defaultextension=".md",
            filetypes=[("Markdown", "*.md"), ("Text", "*.txt")])
        if filename:
            open(filename, "w").write(filedata)

    def init_window(self):
        self.master.title("Markdown Viewer")
        self.pack(fill=tk.BOTH, expand=1)
        menu = tk.Menu(self)
        filemenu = tk.Menu(menu, tearoff=0)
        filemenu.add_command(label="Open", command=self.openfile)
        filemenu.add_command(label="Save as", command=self.savefile)
        filemenu.add_separator()
        filemenu.add_command(label="Exit", command=self.quit)
        menu.add_cascade(label="File", menu=filemenu)
        self.master.config(menu=menu)

        self.inputeditor = tk.Text(self, width=1, font=self.font)
        self.inputeditor.pack(fill=tk.BOTH, expand=1, side=tk.LEFT)
        self.inputeditor.bind("<<Modified>>", self.onChange)

        self.outputbox = HTMLLabel(self, width=1, background="white",
                                   html="<h1>Markdown Editor</h1>")
        self.outputbox.pack(fill=tk.BOTH, expand=1, side=tk.RIGHT)

root = tk.Tk()
root.geometry("750x600")
Window(root)
root.mainloop()

代碼解析

功能塊 1:搭一個(gè)左右分欄的窗口

像搭積木一樣,先放左右兩塊“寫字板”。

root = tk.Tk()
root.geometry("750x600")

750x600 固定大小,防止小白把窗口拉得面目全非。

功能塊 2:左邊寫 Markdown

左邊就是普通的 Text 框,綁定“內(nèi)容被修改”事件。

self.inputeditor = tk.Text(self, width=1, font=self.font)
self.inputeditor.bind("<<Modified>>", self.onChange)

每敲一個(gè)字,就觸發(fā) onChange,右邊立刻刷新。

功能塊 3:右邊實(shí)時(shí)預(yù)覽

markdown2 把 Markdown 秒變 HTML,再用 HTMLLabel 顯示。

def onChange(self, event):
    md2html = Markdown()
    self.outputbox.set_html(md2html.convert(
        self.inputeditor.get("1.0", tk.END)))

所見(jiàn)即所得,連表格、代碼高亮都能實(shí)時(shí)渲染。

功能塊 4:一鍵打開(kāi)/保存

菜單欄放兩個(gè)按鈕,“Open” 讀取現(xiàn)有 .md,“Save as” 導(dǎo)出成 .md.txt。

filemenu.add_command(label="Open", command=self.openfile)
filemenu.add_command(label="Save as", command=self.savefile)

文件對(duì)話框自帶過(guò)濾,小白不會(huì)選錯(cuò)格式。

如果還想更厲害

擴(kuò)展點(diǎn)子 1:命令行批量轉(zhuǎn)換

把當(dāng)前目錄所有 .md 一鍵轉(zhuǎn) .html,適合批量發(fā)布博客。

import glob, pathlib, markdown2
for md in glob.glob("*.md"):
    html = markdown2.markdown_path(md)
    pathlib.Path(md.replace(".md", ".html")).write_text(html, encoding="utf-8")

一行命令,整站靜態(tài)頁(yè)生成完畢。

擴(kuò)展點(diǎn)子 2:加主題切換按鈕

給預(yù)覽區(qū)加“深色/淺色”按鈕,夜間護(hù)眼。

themes = {"light": "white", "dark": "#1e1e1e"}
current = "light"
def toggle_theme():
    global current
    current = "dark" if current == "light" else "light"
    outputbox.config(background=themes[current])
tk.Button(root, text="換膚", command=toggle_theme).pack(side="bottom")

點(diǎn)一下,整個(gè)右邊窗口立刻變暗,熬夜更舒服。

知識(shí)延展

Python Markdown轉(zhuǎn)PDF

完整代碼(≤1000字符,直接展示)

import markdown
import pdfkit
import sys

args = sys.argv[1:]  # 收集命令行參數(shù)
assert args, "No file/dir was provided"

html_texts = []
for arg in args:
    with open(arg, "r", encoding="utf-8") as f:
        md = f.read()
    html_texts.append(markdown.markdown(md))

# 指向 wkhtmltopdf 可執(zhí)行文件(Windows 示例)
config = pdfkit.configuration(
    wkhtmltopdf=r"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe")

for idx, html in enumerate(html_texts):
    filename = args[idx].rsplit('.', 1)[0]  # 去掉擴(kuò)展名
    pdfkit.from_string(html, f'{filename}.pdf', configuration=config)

代碼解析

功能塊 1:命令行接收文件

像快遞小哥一樣,腳本在門口等你把 .md 文件扔進(jìn)來(lái)。

args = sys.argv[1:]
assert args, "No file/dir was provided"

支持一次拖多個(gè)文件:python markdown_to_pdf.py readme.md blog.md

功能塊 2:Markdown 秒變 HTML

把 Markdown 語(yǔ)法翻譯成瀏覽器能看懂的 HTML,就像把方言翻譯成普通話。

html_texts.append(markdown.markdown(md))

表格、代碼塊、標(biāo)題樣式一次性到位。

功能塊 3:HTML 秒變 PDF

用 wkhtmltopdf 把網(wǎng)頁(yè)“打印”成 PDF,排版 100% 還原。

pdfkit.from_string(html, f'{filename}.pdf', configuration=config)

只要路徑正確,Windows、macOS、Linux 都能用。

如果還想更厲害

擴(kuò)展點(diǎn)子 1:命令行加參數(shù),一鍵換主題

加 --theme 參數(shù),用不同 CSS 模板。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--theme", default="github.css")
args = parser.parse_args()
css = open(args.theme).read()
html = f"<style>{css}</style>" + markdown.markdown(md)

運(yùn)行:

python markdown_to_pdf.py readme.md --theme dark.css

擴(kuò)展點(diǎn)子 2:批量文件夾

把某個(gè)文件夾所有 .md 一鍵轉(zhuǎn) PDF。

import glob
for md_path in glob.glob("docs/*.md"):
    with open(md_path, encoding="utf-8") as f:
        html = markdown.markdown(f.read())
    pdfkit.from_string(html, md_path.replace(".md", ".pdf"), configuration=config)

總結(jié)

markdown_editor.py 這把瑞士軍刀只有 60 行,卻把“寫作 + 預(yù)覽 + 導(dǎo)出”三件事裝進(jìn)了一個(gè)輕量級(jí)窗口。

你雙擊即可寫 README、寫博客、寫筆記,再也不用來(lái)回切換軟件。

再加兩行代碼,就能批量轉(zhuǎn)網(wǎng)頁(yè)或一鍵換主題,小白也能玩出花。

下次寫文檔,記得先打開(kāi)它,寫完即發(fā)布,效率翻倍。

到此這篇關(guān)于基于Python實(shí)現(xiàn)Markdown編輯器的示例詳解的文章就介紹到這了,更多相關(guān)Python Markdown編輯器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 檢測(cè)pytorch是否使用GPU的方法小結(jié)

    檢測(cè)pytorch是否使用GPU的方法小結(jié)

    pytorch在服務(wù)器上跑的很慢,nvidia-smi顯示GPU利用率一直是0%,所以本文總結(jié)了一些可以檢測(cè)深度學(xué)習(xí)算法是否在使用GPU的方法,需要的朋友可以參考下
    2023-12-12
  • Python編程中flask的簡(jiǎn)介與簡(jiǎn)單使用

    Python編程中flask的簡(jiǎn)介與簡(jiǎn)單使用

    今天小編就為大家分享一篇關(guān)于Python編程中flask的簡(jiǎn)介與簡(jiǎn)單使用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • Python圖像處理之二值化處理

    Python圖像處理之二值化處理

    所謂”二值化處理“就是將矩陣中每個(gè)點(diǎn)的RGB值(0,0,0)[黑色]或者(255,255,255)[白色],這篇文章主要介紹了Python圖像處理之二值化處理,需要的朋友可以參考下
    2024-05-05
  • python開(kāi)根號(hào)實(shí)例講解

    python開(kāi)根號(hào)實(shí)例講解

    在本篇文章里小編給大家整理的是關(guān)于python開(kāi)根號(hào)實(shí)例講解內(nèi)容,有需要的朋友們可以參考下。
    2020-08-08
  • 七個(gè)生態(tài)系統(tǒng)核心庫(kù)[python自學(xué)收藏]

    七個(gè)生態(tài)系統(tǒng)核心庫(kù)[python自學(xué)收藏]

    無(wú)論你是想快速入手Python,還是想成為數(shù)據(jù)分析大神或者機(jī)器學(xué)習(xí)大佬,亦或者對(duì)Python代碼進(jìn)行優(yōu)化,本文的python庫(kù)都能為你提供一些幫助
    2021-08-08
  • Python如何基于selenium實(shí)現(xiàn)自動(dòng)登錄博客園

    Python如何基于selenium實(shí)現(xiàn)自動(dòng)登錄博客園

    這篇文章主要介紹了Python如何基于selenium實(shí)現(xiàn)自動(dòng)登錄博客園,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • PyQt5 QListWidget選擇多項(xiàng)并返回的實(shí)例

    PyQt5 QListWidget選擇多項(xiàng)并返回的實(shí)例

    今天小編就為大家分享一篇PyQt5 QListWidget選擇多項(xiàng)并返回的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • Python文件路徑os.path函數(shù)深入剖析

    Python文件路徑os.path函數(shù)深入剖析

    這篇文章主要為大家介紹了Python文件路徑os.path函數(shù)深入剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Python二分法搜索算法實(shí)例分析

    Python二分法搜索算法實(shí)例分析

    這篇文章主要介紹了Python二分法搜索算法,實(shí)例分析了Python實(shí)現(xiàn)二分法的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-05-05
  • Python實(shí)現(xiàn)為圖片批量添加隨機(jī)水印

    Python實(shí)現(xiàn)為圖片批量添加隨機(jī)水印

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)為圖片批量添加隨機(jī)水印,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11

最新評(píng)論

洪湖市| 德昌县| 南雄市| 仙居县| 东兰县| 西乡县| 石家庄市| 确山县| 资溪县| 郴州市| 微博| 威远县| 阳曲县| 南陵县| 安达市| 松溪县| 关岭| 西峡县| 兴国县| 丹江口市| 东城区| 杂多县| 五家渠市| 镇沅| 新闻| 城固县| 苍梧县| 东平县| 山丹县| 耿马| 永川市| 伊川县| 乡宁县| 沙雅县| 龙里县| 绥棱县| 越西县| 开鲁县| 普陀区| 西吉县| 额尔古纳市|