2016-07-09 8 views
-2

Я получаю файлы без расширения после их сохранения, хотя я даю им расширения 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 (я пробовал проверил версию, но это ничего не меняет)
+0

Вы проверяли имена файлов из 'cmd.exe' (' dir'), а не Windows Explorer? – cdarke

+0

Измените вызов 'tkinter.filedialog.asksaveasfilename (' – cdarke

+0

@cdarke Я также проверил 'cmd.exe'' (dir) 'тоже, он также показывает файл без расширения –

ответ

2

Отлично! Я сам нашел ответ, просто добавив defaultextension="*.*" вариант. Спасибо всем за попытку ответить на мой вопрос, хотя ни одна из них не решила мою проблему, фактически, большинство из них только опустило мой вопрос без, объяснив их причины. Ну, это не моя вина, если вы не знаете решения LOL! Спасибо за других, которые пытались мне помочь! Оценка! :)

+0

Он даже вызывает предупреждение: «Имя файла недействительно», когда вы не выбираете Правильное расширение файла из списка. Хорошо работает, как и я желал!;) –

+0

Одна из причин понижения - когда вопрос не показывает никаких признаков исследований или попыток решить проблему самостоятельно. У вашего первоначального вопроса была эта проблема. –

+0

@BryanOakley Если я размещаю вопрос здесь, это означает, что я искал решение, прежде чем спрашивать здесь (я не тупой). Ответчикам следует предоставить источники для ссылки. На этот раз я действительно искал решение во многих популярных источниках, таких как effbot, tcl/tk doc и т. Д., Даже SO, но я не нашел решения для своего ответа. Это то, что вы хотите услышать? LOL OK, в следующий раз я добавлю эти источники в свой вопрос. ;) –

0

idlelib. IOBinding (.iomenu в 3.6) имеет этот код, который работает, чтобы добавить .py или .txt, если явно не введен. Я не знаю/не помню, для чего «ТЕКСТ», но поскольку код работает, я оставляю его в покое.

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