2013-10-20 21 views
7

Tôi đang triển khai trình soạn thảo văn bản dựa trên GUI trong python.
Tôi đã hiển thị vùng văn bản nhưng khi tôi cố gắng sử dụng phương thức askaveasfile trong Tkinter, nó cho thấy tệp đã được lưu nhưng khi tôi thử và mở cùng một tệp trong trình soạn thảo trên màn hình, nó cung cấp cho tôi tệp trống.Lưu Hộp thoại Tệp trong Tkinter

Chỉ, tệp được tạo và lưu. Nội dung của nó thì không.

Tôi muốn biết lý do. Tôi có làm điều gì sai? Đây là mã của tôi:

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() 

Trả lời

17

Tên hàm là asksaveasfilename. Và nó phải đủ điều kiện là tkFileDialog.asksaveasfilename. Và nó không chấp nhận đối số mode.

Có thể bạn muốn sử dụng 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. 
+0

Nó hoạt động. Tôi nghĩ đó là vì dấu ngoặc đơn không hoạt động. –

+0

Bạn vừa tạo bản chỉnh sửa cho biết việc lập chỉ mục bắt đầu từ 1.0 nhưng văn bản của tôi được lưu hoàn toàn ngay cả khi tôi đặt chỉ mục bắt đầu là 0.0. –

+4

@RohitShinde, Bạn có thể chỉ định chỉ mục là '(0.0, END) để lấy toàn bộ văn bản, nhưng' (1.0, END) 'là đúng để chỉ định. Nếu bạn muốn dòng thứ hai, bạn nên xác định '2.x', không phải' 1.x'. – falsetru

Các vấn đề liên quan