保存后,扩展名未添加到文件名

时间:2016-07-09 17:26:17

标签: python python-3.x tkinter savefiledialog filedialog

我保存后没有扩展名的文件,虽然我在程序中通过filetypes 选项给他们扩展名。我只能使用defaultextension 选项来做,但我想让用户决定选择一个扩展而不会弄乱代码。另外,当我使用defaultextension 选项时,例如:defaultextension=".txt",它会在我的文件名中添加2 .txt,例如filename.txt.txt。这是我的片段:

from tkinter import *
import tkinter.filedialog

root = Tk()
root.title("Saving a File")
root.geometry("500x500-500+50")

def save():
    filename = filedialog.asksaveasfilename(
        initialdir="D:",
        title="Choose your file",
        filetypes=(
            ("Text Files", "*.txt"),
            ("Python Files", "*.py"),
            ("All Files", "*.*")
            )
        )

    try:
        fileobj = open(filename, 'w')
        fileobj.write(text.get(0.0, "end-1c"))
        fileobj.close()
    except:
        pass

button = Button(root, text="Save", command=save,
                     cursor='hand2', width=30, height=5,
                     bg='black', fg='yellow', font='Helvetica')
button.pack()

text = Text(root)
text.pack()

没有编写文件时遇到任何问题,我的问题仅在于扩展程序

额外信息:

  • 我在Windows 7上
  • 我已取消选中Hide extensions for known file types(我已尝试检查过版本,但它没有改变任何内容)

2 个答案:

答案 0 :(得分:4)

大!我自己通过添加void OnTriggerEnter (Collider obstacle) { if (obstacle.gameObject.tag == "Pick Axe") { obstacle.gameObject.SetActive (false); } } 选项找到了答案。感谢大家试图回答我的问题,虽然他们都没有解决我的问题,实际上,他们中的大多数只是在没有解释其原因的情况下向我提出问题。好吧,如果你不知道解决方案,那不是我的错!感谢其他试图帮助我的人! 赞赏!:)

答案 1 :(得分:0)

idlelib.IOBinding(3.6中的.iomenu)具有此代码,可以在未明确输入时添加.py或.txt。我不知道/记得什么" TEXT"是的,但由于代码有效,我不管它。

    filetypes = [
        ("Python files", "*.py *.pyw", "TEXT"),
        ("Text files", "*.txt", "TEXT"),
        ("All files", "*"),
        ]
    [...]
    def asksavefile(self):
        dir, base = self.defaultfilename("save")
        if not self.savedialog:
            self.savedialog = tkFileDialog.SaveAs(
                    parent=self.text,
                    filetypes=self.filetypes,
                    defaultextension=self.defaultextension)
        filename = self.savedialog.show(initialdir=dir, initialfile=base)
        return filename