如何使用asksaveasfile将Text-widget Tkinter中的文本保存到.doc?

时间:2014-10-19 18:13:04

标签: python dialog tkinter tk

我想使用asksaveasfilename对话框将我在Text小部件中输入的一些内容保存为.txt.doc格式。在此之后,我希望它在resp中打开。记事本或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)

它会创建文件但不会在MS Word或记事本中打开它。相反,它询问我打算如何打开此文件。如果我选择该程序,它将正确打开,但我希望它直接打开。 (没有选择打开文件的程序)。当我直接在“文件名:”框中提供扩展时,它按照我想要的方式工作。

这有效:  文件名:something.doc  保存类型:Word文件(* .doc) --->创建something.doc并在MS Word中打开它。

但事实并非如此  文件名:东西  保存类型:Word文件(* .doc) --->创建一些东西(没有扩展名)并询问我希望它打开的程序。

我使用的是Python 2.7.8,Windows 8,Office 2010。

2 个答案:

答案 0 :(得分:0)

如果添加print name,您可以看到问题,例如

C:/Users/jsharpe/Downloads/testing

请注意,未添加任何扩展程序 - 我只输入了"testing"filetypes参数对于限制用户对现有文件的选择更有用,如果用户不提供,则不会添加相应的扩展名。

您可以为用户未输入扩展程序的情况设置defaultextension,但这不会反映下拉菜单中选择的类型(例如,如果您设置defaultextension=".txt"它即使用户从.doc选择该选项,也不会是filetypes

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

(请注意,按字母顺序排列的参数顺序可让您在添加更多选项时更轻松)


另一方面,你(仍然!)没有close文件,这可能会导致问题 - 我建议使用with上下文管理器进行文件处理:

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

答案 1 :(得分:0)

只需运行此代码即可:

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