使用Python和Tkinter构建简单的Markdown编辑器(3)

然后使用add_command()和add_separator()函数添加3个子菜单(打开、另存为和退出)和分隔符。打开子菜单将执行openfile函数,另存为子菜单将执行savefile函数。最后,Exit将执行一个内建函数quit,该函数将关闭程序。

然后使用add_cascade()函数告诉第一个菜单对象包含filemenu变量。这包括标签文件中的所有子菜单。

最后,我们使用self.master.config()来告诉窗口使用主菜单作为窗口的菜单栏。

使用Python和Tkinter构建简单的Markdown编辑器

它看起来是这样的,但是现在还不要运行它。你会提示错误,openfile和savefile函数没有定义。

正如您现在看到的,我们必须在Window类中定义两个函数,我们将在其中使用tkinter的filedialog。

首先让我们定义打开文件的函数:

def openfile(self):
    openfilename = filedialog.askopenfilename(filetypes=(("Markdown File", "*.md , *.mdown , *.markdown"),
                                                                  ("Text File", "*.txt"),
                                                                  ("All Files", "*.*")))
    if openfilename:
        try:
            self.inputeditor.delete(1.0, END)
            self.inputeditor.insert(END , open(openfilename).read())
        except:
            print("无法打开文件!") 

在这里,首先我们向用户显示一个文件浏览器对话框,允许他们使用filedialog.askopenfilename()选择要打开的文件。与filetypes关键字参数,我们告诉对话框只打开这些类型的文件通过传递一个元组与支持的文件(基本上所有类型的文件):

带 .md , .mdown , .markdown扩展名的文件,

扩展名为.txt的文本文件

在使用通配符扩展的下一行中,我们告诉对话框打开任何扩展名的文件。

然后我们检查用户是否选择了一个文件。如果是,我们尝试打开文件。然后删除输入字段中从第一行的第0个字符到字段末尾的所有文本。

接下来,我们打开并读取所选文件的内容,并在输入字段中插入内容。

如果我们的程序不能打开一个文件,它将打印出错误。但是等等,这不是处理错误的好方法。我们在这里可以做的是向用户显示一个类似这样的错误消息:

使用Python和Tkinter构建简单的Markdown编辑器

为此,我们首先要从tkinter包中导入消息框messagebox。

from tkinter import messagebox as mbox

然后,不像上面那样只是打印一个错误消息,我们将用下面的行替换那一行,以便向用户显示正确的错误消息。

mbox.showerror(“打开选定文件时出错 " , "哎呀!,您选择的文件:{}无法打开!".format(openfilename))

这将创建一个错误消息,就像我上面显示的文件无法打开时的屏幕截图一样。

mbox.showerror函数,第一个参数是消息框的标题。第二个是要显示的消息。

现在,我们需要编写一个savefile函数来保存markdown输入。

def savefile(self):
        filedata = self.inputeditor.get("1.0" , END)
        savefilename = filedialog.asksaveasfilename(filetypes = (("Markdown File", "*.md"),
                                                                  ("Text File", "*.txt")) , title="保存 Markdown 文件")
        if savefilename:
            try:
                f = open(savefilename , "w")
                f.write(filedata)
            except:
                mbox.showerror("保存文件错误" , "哎呀!, 文件: {} 保存错误!".format(savefilename))

在这里,首先我们扫描输入字段的所有内容并将其存储在一个变量中。然后,我们通过为两种类型的文件类型(.md和.txt)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/aa060f11093ffc8e46068cf79c3179e2.html