集成Python运行环境的记事本

代码:(写的有些累了)

#encoding:utf-8
import tkinter
from tkinter import messagebox
from tkinter import filedialog
import os
# 菜单
menuText = {"文件": {"新建": "Ctrl+N", "打开": "Ctrl+O", "保存": "Ctrl+S", "另存为...": "Ctrl+shift+S", "退出": ""},
            "编辑": {"撤销": "Ctrl+U", "恢复": "Ctrl+Shift+Z", "查找": "Ctrl+F", "替换": "Ctrl+R", "全选": "Ctrl+A"},
            "运行": {"Python3运行": "Ctrl+B", "Python2运行": "Ctrl+Shift+B"}, "帮助": {"快捷键": "Ctrl+H", "关于": ""},
            "运行环境修改":{"终端修改": "", }}
# notepad类
class notepad(tkinter.Tk):
    def __init__(self, width=0, height=0, adjustX=0, adjustY=0, flag=False):
        tkinter.Tk.__init__(self)
        if flag:
            self.width = width
            self.height = height
        else:
            self.width = self.winfo_screenwidth()
            self.height = self.winfo_reqheight()
        self.adjustX = adjustX
        self.adjustY = adjustY
        self.start()
    # 屏幕位置确定
    def screenCenter(self):
        screenHeight = self.winfo_screenheight()
        screenWidth = self.winfo_screenwidth()
        centerX = (screenWidth - self.width) / 2 - self.adjustX
        centerY = (screenHeight - self.height) /2 - self.adjustY
        centerPlay = str(self.width) + 'x' + str(self.height) + '+' + str(int(centerX)) + '+' + str(int(centerY))
        self.geometry(centerPlay)
    # notepad菜单
    def notepadMenu(self, textContainer):
        menubar = tkinter.Menu(self)
        for menuItem in menuText:
            menu = tkinter.Menu(menubar, tearoff=0)
            for item in menuText[menuItem]:
                menu.add_command(label=item, accelerator=menuText[menuItem][item], command=lambda name=item:
                self.methodFunc(name, textContainer))
            menubar.add_cascade(label=menuItem, menu=menu)
        self.config(menu=menubar)
    # notepad启动
    def start(self):
        filename = "notepad"
        self.title(filename)
        self.screenCenter()
        text = tkinter.Text(self, undo=True,)
        self.notepadMenu(text)
        text.pack(side=tkinter.LEFT, expand=tkinter.YES, fill=tkinter.BOTH)
        scroll = tkinter.Scrollbar(self)
        scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)
        text.config(yscrollcommand=scroll.set)
        scroll.config(command=text.yview)
        # 键盘事件绑定
        self.bind("<Control-N>", func=lambda event: self.methodFunc("新建", text))
        self.bind("<Control-n>", func=lambda event: self.methodFunc("新建", text))
        self.bind("<Control-B>", func=lambda event: self.methodFunc("Python3运行", text))
        self.bind("<Control-b>", func=lambda event: self.methodFunc("Python3运行", text))

    # notepad菜单及命令设置函数
    def methodFunc(self, name, text):
        if   name == "退出":
            self.quit()
        elif name == "新建":
            print(text)
            text.delete(0.0, 'end')
            self.title("notepad")
        elif name == "快捷键":
            messagebox.showinfo("快捷键", "新建:Ctrl+n    复制:Ctrl+c\n粘贴:Ctrl+v    运行:Ctrl+b")
        elif name == "关于":
            messagebox.showinfo("关于", "Author: Oliver\nCopyright: Oliver's Future Company")
        elif name == "打开":
            result = filedialog.askopenfile('r')
            if result != None:
                filename = result.name
                self.title(filename)
                text.delete(0.0, 'end')
                text.insert(0.0, result.read())
        elif name == "保存":
            if self.title() == "notepad":
                self.codeSave(text)
            else:
                filenameFirst = self.title()
                print(filenameFirst)
                with open(filenameFirst, 'w+') as f:
                    f.write(text.get(0.0, 'end'))
        elif name == "另存为...":
            self.codeSave(text)
        elif name == "撤销":
            text.edit_undo()
        elif name == "恢复":
            text.edit_redo()
        # 可扩展为运行各种计算机编程语言
        elif name == "Python3运行" or name == "Python2运行":
            self.runCode(name)

        # 下面方法省略
    def codeSave(self, text):
        filenameFirst = filedialog.asksaveasfile(defaultextension='.py')
        if None != filenameFirst:
            with open(filenameFirst.name, 'w+') as f:
                f.write(text.get(0.0, 'end'))
            self.title(filenameFirst.name)

    def runCode(self, name):
        try:
            filelist = self.title().split('.')
        except:
            messagebox.showinfo("运行提示!", "运行错误不是python文件")
        else:
            if filelist[-1] == 'py':
                if "Python3" in name:
                # 将deepin-terminal修改为你电脑上的terminal名称,即可运行
                    os.system("deepin-terminal" + " -e" + " python3 {}".format(self.title()))
                else:
                    os.system("deepin-terminal" + " -e" + " python2 {}".format(self.title()))
            else:
                messagebox.showinfo("运行提示!", "运行错误不是python文件")

# 运行
if __name__ == '__main__':
    # notepad实例化
    note = notepad(width=800, height=500, adjustY=50, flag=True).mainloop()

提示:
可扩展为完整的python或其他语言的IDE集成环境。

猜你喜欢

转载自blog.csdn.net/weixin_43690548/article/details/88071797