【问题标题】:Save File Dialog in Tkinter在 Tkinter 中保存文件对话框
【发布时间】:2013-10-20 10:17:25
【问题描述】:

我正在 python 中实现一个基于 GUI 的文本编辑器。
我已经显示了文本区域,但是当我尝试在 Tkinter 中使用 asksaveasfile 方法时,它显示文件已保存,但是当我尝试在桌面编辑器中打开相同的文件时,它给了我一个空白文件。

仅,文件被创建并保存。它的内容不是。

我想知道为什么。难道我做错了什么?这是我的代码:

from Tkinter import *
import tkMessageBox
import Tkinter
import tkFileDialog

def donothing():
   print "a"

def file_save():
    name=asksaveasfile(mode='w',defaultextension=".txt")
    text2save=str(text.get(0.0,END))
    name.write(text2save)
    name.close

root = Tk()
root.geometry("500x500")
menubar=Menu(root)
text=Text(root)
text.pack()
filemenu=Menu(menubar,tearoff=0)
filemenu.add_command(label="New", command=donothing)
filemenu.add_command(label="Open", command=donothing)
filemenu.add_command(label="Save", command=file_save)
filemenu.add_command(label="Save as...", command=donothing)
filemenu.add_command(label="Close", command=donothing)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)

editmenu=Menu(menubar,tearoff=0)
editmenu.add_command(label="Undo", command=donothing)
editmenu.add_command(label="Copy", command=donothing)
editmenu.add_command(label="Paste", command=donothing)
menubar.add_cascade(label="Edit", menu=editmenu)

helpmenu=Menu(menubar,tearoff=0)
helpmenu.add_command(label="Help",command=donothing)
menubar.add_cascade(label="Help",menu=helpmenu)

root.config(menu=menubar)
root.mainloop()  

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    函数名称是asksaveasfilename。它应该被限定为tkFileDialog.asksaveasfilename。而且它不接受mode 参数。

    也许你想使用tkFileDialog.asksaveasfile

    def file_save():
        f = tkFileDialog.asksaveasfile(mode='w', defaultextension=".txt")
        if f is None: # asksaveasfile return `None` if dialog closed with "cancel".
            return
        text2save = str(text.get(1.0, END)) # starts from `1.0`, not `0.0`
        f.write(text2save)
        f.close() # `()` was missing.
    

    【讨论】:

    • 它有效。我认为这是因为括号不起作用。
    • 您刚刚创建了一个编辑,说索引从 1.0 开始,但即使我将开始索引设置为 0.0,我的文本也完美保存。
    • @RohitShinde,可以将索引指定为 (0.0, END) to get entire text, but (1.0, END)` 是正确的指定方式。如果你想要第二行,你应该指定2.x,而不是1.x
    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多