Метод сохранения файлов tkFileDialog не работает - PullRequest
2 голосов
/ 23 июля 2011

Я только начал использовать Tkinter для класса программирования, и у меня возникли некоторые проблемы с использованием обработчиков диалоговых файлов. Методы fileopen и filesaveas работают правильно, а метод filesave - нет. Спецификация требует, чтобы метод filesave сохранялся в последний сохраненный файл; если файл не был сохранен, то сохранить в последний открытый файл; иначе сохраните имя по умолчанию quiz_spec.py. По какой-то причине первые два вызова записи, похоже, не сохраняются, сохраняют файл, когда они достигнуты (и также не генерируют никаких ошибок). Буду признателен, если кто-нибудь скажет мне, почему одни и те же вызовы сохранения в файловом хранилище и файловом хранилище работают по-разному, а также указывают на хороший пример функции сохранения tkFileDialog.

class FileMan():

    def __init__(self):
        self.lastsave = None
        self.lastopen = None

    def fileopen(self):
        handle = askopenfile(mode = 'r')
        print "name of file you picked = "+str(handle.name)
        self.lastopen = handle
        print "first line of data from file: "+handle.readline()

    def filesave(self):
        if (self.lastsave):
            self.lastsave.write("Save: Some data to save into the file\n")
        elif (self.lastopen):
            self.lastopen.write("Save: Some data to save into the file\n")
        else:
            handle = open('quiz_spec.py', 'w')
            handle.write("Save: This is the new content of test.txt :-)")

    def filesaveas(self):
        handle = asksaveasfile(mode = 'w', defaultextension = '.py')
        print "name of file you picked = "+str(handle.name)
        self.lastsave = handle
        handle.write("SaveAs: Some data to save into the file\n")

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Я понял это, я не закрывал файл. Глупый я.

2 голосов
/ 23 июля 2011

Мне совершенно ясно, что ваши файловые дескрипторы self.lastopen и self.lastsave установлены к некоторому эквиваленту False к тому времени, когда вы звоните filesave. Вы проверяли, что они сохраняются после выхода из функций fileopen и filesave? Довольно просто отладить, попробуйте:

my_man = FileMan()
my_man.fileopen()
my_man.filesave()
print my_man.lastopen
print my_man.lastsave

Если это не сработает, попробуйте обновить ваш вопрос с результатами этого, и мы возьмем его оттуда. Кроме того, вы должны проверить, если:

print my_man.lastopen == False and my_man.lastsave == False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...