2016-03-22 3 views
0

Я пытаюсь сохранить файл из окна tkinter python с помощью приглашения «Сохранить как». Я искал какое-то время и не могу найти ответ, который я ищу. Я могу успешно сохранить информацию в файл с именем по умолчанию и даже сохранить его с помощью имени пользователя, вводимого через input(), однако это не то, что я пытаюсь сделать. Я хочу, чтобы пользователь мог нажать «Сохранить как», а затем, когда появится приглашение, они вводят имя файла и сохраняют его как имя, я просто не могу найти ответ нигде. Вот мой код в данный момент:Python: Сохранение файла на основе ввода пользователем

# Import Tkinter 
from tkinter import * 
import os 
import pickle 
from tkinter.filedialog import askopenfilename, asksaveasfile 
from tkinter.messagebox import * 

MainWindow = Tk() 
MainWindow.geometry("600x400") 
MainWindow.attributes("-alpha", 1) 
MainWindow.title(string="Hours Log") 
CurrentDirect=os.getcwd() 

def FileSaveAs(): 
fname = asksaveasfile(initialdir=CurrentDirect ,filetypes=(("Text Files", "*.txt"), 
             ("All files", "*.*"))) 
if fname: 
     try: 
      print(fname) 
      SH = SHVar.get() 
      SM = SMVar.get() 
      SAP = SAPVar.get() 
      EH = EHVar.get() 
      EM = EMVar.get() 
      EAP = EAPVar.get() 
      DM = DMVar.get() 
      DD = DDVar.get() 
      DY = DYVar.get() 
      DE = Description.get("1.0", END) 
      AP = APVar.get() 
      with open("filename.txt", 'wb') as f: 
       pickle.dump([SH, SM, SAP, EH, EM, EAP, DM, DD, DY, DE, AP], f) 

     except: 
      showerror("FILE SAVE ERROR", "Error on Saving File!\n'%s'" % fname) 
     return 

Я понимаю, что «filename.txt» это имя файла для сохранения, однако, как я приобретаю имя переменной из командной строки?

ПРИМЕЧАНИЕ. В этом коде нет ошибок, он отлично работает с остальной частью моей программы.

ответ

1

Вы можете использовать asksaveasfilename вместо asksaveasfile и fname вместо "filename.txt".

60 def asksaveasfile(self): 
    61 
    62  """Returns an opened file in write mode.""" 
    63 
    64  return tkFileDialog.asksaveasfile(mode='w', **self.file_opt) 
    65 
    66 def asksaveasfilename(self): 
    67 
    68  """Returns an opened file in write mode. 
    69  This time the dialog just returns a filename and the file is opened by your own code. 
    70  """ 
+0

Это сработало, спасибо! Я просто изменил строки из: 'имя_файла = asksaveasfile (...' ' с открытым ("Filename.txt", 'термометр'), как F:' к: 'имя_файл = asksaveasfilename (...' 'с открытым (filename +". Txt ", 'wb') как f:' Это всегда сипсовые, которые меня достают. –