[Python] GUI zum Einfügen des TeX-Formats in PowerPoint mit 2 Klicks [PowerPoint]

Einführung

Können Sie einfach das Schaltflächenmenü eingeben, um Folienmaterialien zu erstellen, bei denen Formeln häufig verwendet werden? ist was ich denke. Der Versuch, TeX mit Powerpo zu verwenden, erfordert jedoch viel Aufwand und ist mühsam.

Lösen wir ein solches Problem **, indem wir ein sehr einfaches Werkzeug ** erstellen. (Nur kompatibel mit Windows)

Was wurde gemacht

ldfsi-r7a10.gif

Code

from urllib.parse import quote
from urllib.request import urlopen
import os
import tkinter
from tkinter import ttk
import pyperclip as ppc
import win32com.client
app = None
ppt = None
T = False


def setup():
    global app, ppt, T
    app = win32com.client.GetObject(Class="PowerPoint.Application")
    try:
        ppt = app.ActivePresentation
        if nop.get():
            app.CommandBars.ExecuteMso("InsertBuildingBlocksEquationsGallery")
            app.ActiveWindow.Selection.SlideRange.Shapes(
                app.ActiveWindow.Selection.SlideRange.Shapes.Count
            ).TextFrame.TextRange.Text = "Ⓣ"
            T = True
        else:
            T = False
        return True
    except:
        ppt = None
        return False


def isOpen():
    try:
        win32com.client.GetObject(Class="PowerPoint.Application")
        return True
    except:
        return False


def insertTeX():
    global index, texs
    math = tex.get("1.0", "end -1c")
    if not math or not isOpen():
        return
    if not T or not ppt or app != win32com.client.GetObject(
            Class="PowerPoint.Application"):
        if not setup(): return
    if nop.get():
        app.CommandBars.ExecuteMso("InsertBuildingBlocksEquationsGallery")
        app.ActiveWindow.Selection.SlideRange.Shapes(
            app.ActiveWindow.Selection.SlideRange.Shapes.Count
        ).TextFrame.TextRange.Text = " ".join(math.splitlines())
        app.CommandBars.ExecuteMso("EquationProfessional")
    else:
        with urlopen(
                f'https://texclip.marutank.net/render.php/texclip20201001121356.svg?s={quote(math)}&f=c&r=300&m=s&b=f&k=f'
        ) as svg:
            with open(
                    os.path.dirname(os.path.abspath(__file__)) + r"\tmp.svg",
                    "wb") as f:
                f.write(svg.read())
        app.ActiveWindow.Selection.SlideRange.Shapes.AddPicture(
            os.path.dirname(os.path.abspath(__file__)) + r"\tmp.svg", False,
            True, 0, 0)
        os.remove(os.path.dirname(os.path.abspath(__file__)) + r"\tmp.svg")
    if not texs or texs[-1] != math:
        texs.append(math)
        index += 1


def setTeX():
    tex.delete("1.0", "end -1c")
    tex.insert("1.0", ppc.paste())


def prev():
    global index
    if texs:
        index = max(index - 1, 0)
        tex.delete("1.0", "end -1c")
        tex.insert("1.0", texs[index])
    return


def next_():
    global index
    if texs:
        index = min(index + 1, len(texs) - 1)
        tex.delete("1.0", "end -1c")
        tex.insert("1.0", texs[index])
    return


main_win = tkinter.Tk()
main_win.title("TeX2PPT")
main_win.geometry("500x95")
main_win.minsize(main_win.winfo_width(), 95)

main_frm = ttk.Frame(main_win)
main_frm.grid(column=0, row=0, sticky=tkinter.NSEW, padx=5, pady=10)

index = -1
texs = []
tex = tkinter.Text(main_frm)
paste_btn = ttk.Button(main_frm, text="Einfügen", command=setTeX)
insert_btn = ttk.Button(main_frm, text="Einfügen", command=insertTeX)
prev_btn = ttk.Button(main_frm, text="∧", command=prev, width=2)
next_btn = ttk.Button(main_frm, text="∨", command=next_, width=2)
nop = tkinter.IntVar()
nop.set(1)
rb1 = ttk.Radiobutton(main_frm, text='Formel', value=1, variable=nop)
rb2 = ttk.Radiobutton(main_frm, text='Bild', value=0, variable=nop)

tex.grid(column=0, row=0, sticky='nsew', rowspan=10, columnspan=10, padx=5)
paste_btn.grid(column=11, row=8, columnspan=2)
insert_btn.grid(column=11, row=9, columnspan=2)
prev_btn.grid(column=10, row=7)
next_btn.grid(column=10, row=9)
rb1.grid(column=11, row=7, sticky=tkinter.SE)
rb2.grid(column=12, row=7, sticky=tkinter.SE)

main_win.columnconfigure(0, weight=1)
main_win.rowconfigure(0, weight=1)
main_frm.columnconfigure(1, weight=1)
main_frm.rowconfigure(1, weight=1)
main_win.attributes("-topmost", True)
main_win.mainloop()

Wie benutzt man

Schließlich

Desmos Wenn Sie eine Formel kopieren, liegt sie im TeX-Format vor. Sie können sie daher bequem in Desmos eingeben und kopieren → einfügen (eher) Gemacht für).

Recommended Posts

[Python] GUI zum Einfügen des TeX-Formats in PowerPoint mit 2 Klicks [PowerPoint]
INSERT in MySQL mit Python [Für Anfänger]
Formatieren Sie Python-Code mit Emacs automatisch in PEP8-kompatiblen Code
Hinweis zum Formatieren von Zahlen mit der Python-Formatierungsfunktion
Fügen Sie Bilder mit Python + α automatisch in Powerpo-Materialien ein
Zusammenfassung der Tools zum Betreiben der Windows-Benutzeroberfläche mit Python
[GUI in Python] PyQt5-Layout-Management-
Stilvolle Technik zum Einfügen von CSV-Daten in Excel mit Python
Formatieren Sie json mit Vim (mit Python)
[GUI mit Python] PyQt5-Vorbereitung-
String-Format mit Python% -Operator
[GUI mit Python] PyQt5 -Paint-
[GUI mit Python] PyQt5 -Widget II-
Lassen Sie uns eine GUI mit Python erstellen.
Erste Schritte mit Python für PHPer-Klassen
[GUI mit Python] PyQt5-Der erste Schritt-
[GUI in Python] PyQt5-Drag & Drop-
[GUI mit Python] PyQt5 -Custom Widget-
Erste Schritte mit Python für PHPer-Funktionen
[Python] Format, wenn to_csv mit Pandas
Folie bearbeiten (Powerpo für Google) mit Python (kostengünstiger RPA-Fall mit Google API und Python)
Einfache Schlüsselwortextraktion mit TermExtract für Python
Erstellen einer einfachen Power-Datei mit Python
WEB-Scraping mit Python (für persönliche Notizen)
Manuelle SSH-Registrierung für Coreserver mit Python
Verwenden Sie DeepL mit Python (für die Artikelübersetzung)
Memo, um nach KPI mit Python zu fragen
Verstärken Sie Bilder für maschinelles Lernen mit Python
Tipps zum Umgang mit Binärdateien in Python
Fügen Sie Protokollpuffer mit Python in SQLite ein
Tipps zur Verwendung von Python + Caffe mit TSUBAME
[Shakyo] Begegnung mit Python zum maschinellen Lernen
Verarbeiten Sie mehrere Listen mit for in Python
Erste Schritte mit Python für PHPer-Super Basics
Debuggen Sie die MySQL-Verbindung mit Python MySQL.connector
[Python] Bilder mit OpenCV lesen (für Anfänger)
WebApi-Erstellung mit Python (CRUD-Erstellung) Für Anfänger
Fröhliche GUI-Konstruktion mit Elektron und Python
Vorbereitung zum Schaben mit Python [Schokoladengeschmack]
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Teilen Sie jede PowerPoint-Folie in eine JPG-Datei und geben Sie sie mit Python aus