Tkinter Text 存储Text控件内容

Tkinter Text 存储Text控件内容

当使用编辑程序完成文件的编排后,下一步是将所编排的文件存储,这也将是本节的重点。

示例1

一个简单文档存储的程序,这个程序在File菜单中只包含两个功能:Save和Exit。Save可以将所编辑的文档存储在apidemos.txt,Exit则是结束此程序。程序执行时窗口标题是apidemos.com,当文档存储后窗口标题将改为所存储的文档名apidemos.txt。

from tkinter import * 

def saveFile():
    textContent = text.get("1.0",END)
    filename = "apidemos.txt"
    with open(filename,"w") as output:
        output.write(textContent)
        root.title(filename)

root = Tk() 
root.title("apidemos.com") 
root.geometry("300x180") 

menubar = Menu(root)          # 建立最上层菜单
# 建立菜单类别对象,并将此菜单命名为File
filemenu = Menu(menubar,tearoff=False)
menubar.add_cascade(label="File",menu=filemenu)
# 在File菜单内建立菜单列表
filemenu.add_command(label="Save",command=saveFile)
filemenu.add_command(label="Exit",command=root.destroy)
root.config(menu=menubar)

# 建立Text 
text = Text(root,undo=True) 
text.pack(fill=BOTH,expand=True)
text.insert(END,"Five Hundred Miles\n")           # 插入时同时设置Tag
text.insert(END,"If you miss the rain I am on,\n")
text.insert(END,"You will knw that I am gone.\n")
text.insert(END,"You can hear the whistle blw\n")
text.insert(END,"A hunded miles,\n")

root.mainloop() 

输出:

Tkinter Text 存储Text控件内容

点击Save后:

Tkinter Text 存储Text控件内容

下面是apidemos.txt的内容。

Five Hundred Miles
If you miss the rain I am on,
You will knw that I am gone.
You can hear the whistle blw
A hunded miles,

上述程序虽然可以执行存储文档的工作,但不是GUI的设计方式,在GUI的设计中应该是启动“另存为”对话框,然后可以选择将文档存储的文件夹再输入文件名。在tkinter.f i ledialog模块中有asksaveasf i lename( )方法,我们可以使用此方法,让窗口出现对话框,再执行存储工作。

filename = asksaveasfilename()

上述程序可以传回所存文档的路径(含文件夹)。

示例2

建立一个File菜单,在这个菜单内有Save As命令,执行此命令可以出现“Save as”对话框,然后可以选择文件夹以及输入文件名,最后存储文档。

from tkinter import * 
from tkinter.filedialog import asksaveasfilename

def saveAsFile():
    global filename
    textContent = text.get("1.0",END)

    filename = asksaveasfilename()
    print("The file path passed back is :   ",filename)
    if filename == "":
        return
    with open(filename,"w") as output:
        output.write(textContent)
        root.title(filename)
filename = "apidemos"
root = Tk() 
root.title(filename) 
root.geometry("300x180") 

menubar = Menu(root)          # 建立最上层菜单
# 建立菜单类别对象,并将此菜单命名为File
filemenu = Menu(menubar,tearoff=False)
menubar.add_cascade(label="File",menu=filemenu)
# 在File菜单内建立菜单列表
filemenu.add_command(label="Save As",command=saveAsFile)
filemenu.add_separator()
filemenu.add_command(label="Exit",command=root.destroy)
root.config(menu=menubar)

# 建立Text 
text = Text(root,undo=True) 
text.pack(fill=BOTH,expand=True)
text.insert(END,"Five Hundred Miles\n")           # 插入时同时设置Tag
text.insert(END,"If you miss the rain I am on,\n")
text.insert(END,"You will knw that I am gone.\n")
text.insert(END,"You can hear the whistle blw\n")
text.insert(END,"A hunded miles,\n")

root.mainloop() 

输出:

Tkinter Text 存储Text控件内容

作者使用的文件名是apidemos2.txt,当单击“Save”按钮后,可以保存此文档,然后可以在窗口看到下列结果。

Tkinter Text 存储Text控件内容

其实在正规的文字编辑程序中,需要考虑的事项有许多,例如,可以有Save命令,可以直接使用目前文件名存储文档,如果尚未存盘才出现“另存为”对话框。另外,也须考虑快捷键的使用,不过经过第16章和第17章的说明,相信读者已经有能力设计这方面的程序。

上述使用最简单的asksaveasfilename( )方法,其实在这个方法内有许多参数可以使用,例如在先前的执行结果中,必须在另存新文件对话框的文件名字段输入含扩展名的文件名,如果我们感觉所输入的文件名是txt文档,可以参考下列实例设置参数。

示例3

假设所建的文档是txt文档。

from tkinter import * 
from tkinter.filedialog import asksaveasfilename

def saveAsFile():
    global filename
    textContent = text.get("1.0",END)

    filename = asksaveasfilename(defaultextension=".txt")
    print("The file path passed back is :   ",filename)
    if filename == "":
        return
    with open(filename,"w") as output:
        output.write(textContent)
        root.title(filename)
filename = "apidemos"
root = Tk() 
root.title(filename) 
root.geometry("300x180") 

menubar = Menu(root)          # 建立最上层菜单
# 建立菜单类别对象,并将此菜单命名为File
filemenu = Menu(menubar,tearoff=False)
menubar.add_cascade(label="File",menu=filemenu)
# 在File菜单内建立菜单列表
filemenu.add_command(label="Save As",command=saveAsFile)
filemenu.add_separator()
filemenu.add_command(label="Exit",command=root.destroy)
root.config(menu=menubar)

# 建立Text 
text = Text(root,undo=True) 
text.pack(fill=BOTH,expand=True)
text.insert(END,"Five Hundred Miles\n")           # 插入时同时设置Tag
text.insert(END,"If you miss the rain I am on,\n")
text.insert(END,"You will knw that I am gone.\n")
text.insert(END,"You can hear the whistle blw\n")
text.insert(END,"A hunded miles,\n")

root.mainloop() 

输出:

Tkinter Text 存储Text控件内容

另存为时,我们只输入了abc,自动保存为abc.txt

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程