How to save text from a Text-widget Tkinter to a .doc using asksaveasfile?

…衆ロ難τιáo~ 提交于 2020-01-11 13:54:48

问题


I want to save some stuff I entered in a Text widget to a .txt or .doc format, using an asksaveasfilename dialog box. After this I want it to open in resp. Notepad or MS Word.

from tkFileDialog import asksaveasfilename
import os.path

name = asksaveasfilename(
           initialdir="dir",
           title="Save as",
           filetypes=[("Text files",".txt"),("Word files",".doc")])

data = open(name,"w")
data.write("text from text widget")

os.startfile(name)

It creates the file but it won't open it in MS Word or Notepad. Instead it asks how I want to open this file. If I choose the programm it will open correctly, but I want it to open directly. (without choosing a program to open the file with). When I give the extension directly in the "File name:" box it works the way I want though.

This works: File name: something.doc Save as type: Word file (*.doc) ---> creates something.doc and opens it in MS Word.

But this doesn't File name: something Save as type: Word file (*.doc) ---> creates something (no extension) and ask in what program I want it to open.

I use Python 2.7.8, Windows 8, Office 2010.


回答1:


You can see the problem if you add print name, e.g.

C:/Users/jsharpe/Downloads/testing

note that no extension has been added - I only entered "testing". The filetypes argument is more useful for limiting the user's selection of existing files, it won't add the appropriate extension if the user doesn't supply one.

You can set a defaultextension for the cases where the user doesn't enter an extension, but this won't reflect the type selected in the drop-down (e.g. if you set defaultextension=".txt" it won't be .doc even if the user chooses that option from filetypes).

name = asksaveasfilename(defaultextension=".txt",
                         filetypes=[("Text files",".txt"),
                                    ("Word files",".doc")],
                         initialdir="dir",
                         title="Save as")

(Note that alphabetical argument order makes life easier as you add more and more options)


On a side note, you (still!) don't close the file, which could cause issues - I'd suggest using the with context manager for file handling:

with open(name, "w") as data:
    data.write("text from text widget")



回答2:


Just run this code it will work:

from tkinter import *
from tkinter import ttk
name=[]*1000
surname=[]*1000
email=[]*1000
password=[]*1000
cpassword=[]*1000
phonenum=[]*1000
def mainpage3():
    global phonenum
    global cpassword
    global password
    global email
    global surname
    global name
    global page1
    global bpage
    global e1
    global e2
    global e3
    global e4
    global e5
    global e6 
    name.append(e1.get())
    surname.append(e2.get())
    email.append(e3.get())
    password.append(e4.get())
    cpassword.append(e5.get())
    phonenum.append(e6.get())
    bpage.destroy()
    cpage=Tk()
    cpage.title('boors')
    mainframe = ttk.Frame(cpage, padding="3 3 12 12")
    mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
    mainframe.columnconfigure(0, weight=1)
    mainframe.rowconfigure(0, weight=1)
    ttk.Label(cpage,text='نام').grid(column=8,row=1)
    ttk.Label(cpage,text='نام خانوادگي').grid(column=8,row=2)
    ttk.Label(cpage,text='ايميل').grid(column=8,row=3)
    ttk.Label(cpage,text='شماره تلفن').grid(column=8,row=4)
    ttk.Label(cpage,text=name[0]).grid(column=7,row=1)
    ttk.Label(cpage,text=surname[0]).grid(column=7,row=2)
    ttk.Label(cpage,text=email[0]).grid(column=7,row=3)
    ttk.Label(cpage,text=phonenum[0]).grid(column=7,row=4)
    ttk.Label(cpage,text='').grid(column=8,row=5)
    ttk.Button(cpage,text='خريد').grid(column=8,row=6)
    ttk.Button(cpage,text='فروش').grid(column=8,row=7)
    ttk.Entry(cpage).grid(column=7,row=6)
    ttk.Entry(cpage).grid(column=7,row=7)
    ttk.Label(cpage,text='agah').grid(column=1,row=1)
    ttk.Label(cpage,text='agah').grid(column=2,row=1)
    ttk.Label(cpage,text='agah').grid(column=3,row=1)
    ttk.Label(cpage,text='agah').grid(column=4,row=1)
    ttk.Label(cpage,text='code').grid(column=5,row=1)
    ttk.Label(cpage,text='agah').grid(column=1,row=2)
    ttk.Label(cpage,text='agah').grid(column=2,row=2)
    ttk.Label(cpage,text='agah').grid(column=3,row=2)
    ttk.Label(cpage,text='agah').grid(column=4,row=2)
    ttk.Label(cpage,text='1').grid(column=5,row=2)
    ttk.Label(cpage,text='agah').grid(column=1,row=3)
    ttk.Label(cpage,text='agah').grid(column=2,row=3)
    ttk.Label(cpage,text='agah').grid(column=3,row=3)
    ttk.Label(cpage,text='agah').grid(column=4,row=3)
    ttk.Label(cpage,text='2').grid(column=5,row=3)
    ttk.Label(cpage,text='agah').grid(column=1,row=4)
    ttk.Label(cpage,text='agah').grid(column=2,row=4)
    ttk.Label(cpage,text='agah').grid(column=3,row=4)
    ttk.Label(cpage,text='agah').grid(column=4,row=4)
    ttk.Label(cpage,text='3').grid(column=5,row=4)
    ttk.Label(cpage,text='agah').grid(column=1,row=5)
    ttk.Label(cpage,text='agah').grid(column=2,row=5)
    ttk.Label(cpage,text='agah').grid(column=3,row=5)
    ttk.Label(cpage,text='agah').grid(column=4,row=5)
    ttk.Label(cpage,text='4').grid(column=5,row=5)
    ttk.Label(cpage,text='اخبار').grid(column=3,row=6)
    ttk.Label(cpage,text=' بگو آگاه اخبار').grid(column=3,row=7)
    ttk.Label(cpage,text='     ').grid(column=2,row=6)
def mainpage2():
    global e1
    global e2
    global e3
    global e4
    global e5
    global e6
    global bpage
    page1.destroy()
    bpage=Tk()
    bpage.title('boors')
    bpage.geometry('1000x1000')

    mainframe = ttk.Frame(bpage, padding="3 3 12 12")
    mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
    mainframe.columnconfigure(0, weight=1)
    mainframe.rowconfigure(0, weight=1)
    ttk.Label(bpage,text='').grid(column=1,row=1,sticky=E)
    ttk.Label(bpage,text='').grid(column=1,row=3,sticky=E)
    ttk.Label(bpage,text='').grid(column=1,row=4,sticky=E)
    ttk.Label(bpage,text='').grid(column=1,row=6,sticky=E)
    ttk.Label(bpage,text='').grid(column=1,row=7,sticky=E)
    ttk.Label(bpage,text='').grid(column=1,row=9,sticky=E)
    ttk.Label(bpage,text='').grid(column=1,row=10,sticky=E)
    ttk.Label(bpage,text='').grid(column=1,row=12,sticky=E)
    ttk.Label(bpage,text='').grid(column=1,row=13,sticky=E)
    ttk.Label(bpage,text='').grid(column=1,row=15,sticky=E)
    ttk.Label(bpage,text='').grid(column=1,row=16,sticky=E)
    ttk.Label(bpage,text='').grid(column=1,row=18,sticky=E)
    ttk.Label(bpage,text='').grid(column=1,row=19,sticky=E)
    ttk.Label(bpage,text='Name',font='Verdana 25 bold').grid(column=1,row=2,sticky=E)
    e1=ttk.Entry(bpage,width=100)
    e1.grid(column=2,row=2,sticky=E)
    ttk.Label(bpage,text='Surname',font='Verdana 25 bold').grid(column=1,row=5,sticky=E)
    e2=ttk.Entry(bpage,width=100)
    e2.grid(column=2,row=5,sticky=E)
    ttk.Label(bpage,text='Email',font='Verdana 25 bold').grid(column=1,row=8,sticky=E)
    e3=ttk.Entry(bpage,width=100)
    e3.grid(column=2,row=8,sticky=E)
    ttk.Label(bpage,text='Password',font='Verdana 25 bold').grid(column=1,row=11,sticky=E)
    e4=ttk.Entry(bpage,width=100)
    e4.grid(column=2,row=11,sticky=E)
    ttk.Label(bpage,text='confirm password',font='Verdana 25 bold').grid(column=1,row=14,sticky=E)
    e5=ttk.Entry(bpage,width=100)
    e5.grid(column=2,row=14,sticky=E)
    ttk.Label(bpage,text='phone number',font='Verdana 25 bold').grid(column=1,row=17,sticky=E)
    e6=ttk.Entry(bpage,width=100)
    e6.grid(column=2,row=17,sticky=E)    
    ttk.Button(bpage,text='done',width=100,command=mainpage3).grid(column=2,row=20,sticky=E)

def mainpage():
    global page1
    page1=Tk()
    page1.title('bours')
    mainframe = ttk.Frame(page1, padding="3 3 12 12")
    mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
    mainframe.columnconfigure(0, weight=1)
    mainframe.rowconfigure(0, weight=1)
    ttk.Label(page1,text='Register Here',font = "Verdana 80 bold").grid(column=1,row=2)
    ttk.Label(page1,text='',font='Verdana 30 bold').grid(column=1,row=1,sticky=E)
    ttk.Button(page1,text='register',width=170,command=mainpage2).grid(column=1,row=4,sticky=E)
    ttk.Label(page1,text='',font='Verdana 30 bold').grid(column=1,row=3,sticky=E)
mainpage()


来源:https://stackoverflow.com/questions/26453793/how-to-save-text-from-a-text-widget-tkinter-to-a-doc-using-asksaveasfile

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!