分享

python代码高亮小程序4

 nxhujiee 2023-06-07 发布于宁夏
  1. "python代码高亮小程序4"  
  2.   
  3. import tkinter as tk  
  4. from tkinter import scrolledtext  
  5. from tkinter import messagebox  
  6. from tkinter import ttk  
  7. from pygments import highlight  
  8. from pygments.lexers import PythonLexer  
  9. from pygments.formatters import HtmlFormatter  
  10. import webbrowser  
  11.   
  12.   
  13. class Application(tk.Frame):  
  14.     def __init__(self, master=None):  
  15.         super().__init__(master)  
  16.         self.master = master  
  17.         self.master.title("Python代码转换成HTML格式高亮文本")  
  18.         self.master.geometry("1400x800")  
  19.         self.create_widgets()  
  20.   
  21.     def create_widgets(self):  
  22.         # 左边输入框  
  23.         self.input_text1 = scrolledtext.ScrolledText(self.master, width=80, height=20)  
  24.         self.input_text1.grid(row=0, column=0, padx=10, pady=10)  
  25.   
  26.         # 左边输出框  
  27.         self.output_text = scrolledtext.ScrolledText(self.master, width=80, height=20)  
  28.         self.output_text.grid(row=1, column=0, padx=10, pady=10)  
  29.   
  30.         # 右边预览框  
  31.         self.preview_frame = tk.Frame(self.master, width=400, height=560)  
  32.         self.preview_frame.grid(row=0, column=1, rowspan=2, padx=10, pady=10)  
  33.         self.preview_text = tk.Text(self.preview_frame, width=60, height=40)  
  34.         self.preview_text.pack(fill="both", expand=True)  
  35.   
  36.         # 粘贴源码按钮  
  37.         self.paste_button = ttk.Button(self.master, text="粘贴源码", command=self.paste_code)  
  38.         self.paste_button.grid(row=2, column=0, padx=10, pady=10, sticky="w")  
  39.   
  40.         # 转为HTML按钮  
  41.         self.convert_button = ttk.Button(self.master, text="转为HTML", command=self.convert_to_html)  
  42.         self.convert_button.grid(row=2, column=0, padx=10, pady=10, sticky="n")  
  43.   
  44.         # 复制HTML按钮  
  45.         self.copy_button = ttk.Button(self.master, text="复制HTML", command=self.copy_html)  
  46.         self.copy_button.grid(row=3, column=0, padx=10, pady=10, sticky="e")  
  47.   
  48.         # 预览网页按钮  
  49.         self.preview_button = ttk.Button(self.master, text="预览网页", command=self.preview_web)  
  50.         self.preview_button.grid(row=3, column=0, padx=10, pady=10, sticky="s")  
  51.   
  52.     def paste_code(self):  
  53.         self.input_text1.delete(1.0, tk.END)  
  54.         self.input_text1.insert(tk.END, self.master.clipboard_get())  
  55.   
  56.     def convert_to_html(self):  
  57.         code = self.input_text1.get(1.0, tk.END)  
  58.         if not code.strip():  
  59.             messagebox.showerror("错误""请输入Python代码")  
  60.             return  
  61.         html = highlight(code, PythonLexer(), HtmlFormatter())  
  62.         self.output_text.delete(1.0, tk.END)  
  63.         self.output_text.insert(tk.END, html)  
  64.   
  65.     def copy_html(self):  
  66.         html = self.output_text.get(1.0, tk.END)  
  67.         if not html.strip():  
  68.             messagebox.showerror("错误""请先转换为HTML")  
  69.             return  
  70.         self.master.clipboard_clear()  
  71.         self.master.clipboard_append(html)  
  72.         messagebox.showinfo("提示""已复制HTML到剪贴板")  
  73.   
  74.     def preview_web(self):  
  75.         html = self.output_text.get(1.0, tk.END)  
  76.         if not html.strip():  
  77.             messagebox.showerror("错误""请先转换为HTML")  
  78.             return  
  79.         with open("preview.html""w", encoding="utf-8") as f:  
  80.             f.write(f"<style type='text/css'>{HtmlFormatter().get_style_defs('.highlight')}</style> ")  
  81.             f.write(html)  
  82.         webbrowser.open("preview.html")  
  83.   
  84.   
  85. if __name__ == '__main__':  
  86.     root = tk.Tk()  
  87.     app = Application(master=root)  
  88.     app.mainloop()  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约