Найти - Пользователи
Полная версия: сохранение в файл(gui)
Начало » Python для новичков » сохранение в файл(gui)
1 2
Ksey
Всем привет, я еще новичок, и у меня такой вопрос по поводу GUI
Мне надо, что-бы текст введенный в logr = Entry(rg, width=20,bd=3) сохранялся в текстовый файл по нажатию кнопки(Если например ввел в текстовое поле “блабла” это сохранялось в блокнот, по нажатию кнопки).Я сделал это так:
def sohr(logr,*pasr):
    logs = open("D:\logins.txt","w")
    logs.write("{0}:{1}\n".format(logr, pasr ))
    logs.close()
    sogl = Button(rg, text="Я согласен с правилами, регистрация.")
    sogl.bind("<Button-1>",sohr)
    reg1 = Label(rg, text="Придумате логин:", relief=FLAT)
    logr = Entry(rg, width=20,bd=3)
Но в текстовый файл сохраняется что-то типо <tkinter.Event object at 0x0000000002A53E10>)
что делать?
ilnur
ну правильно. в функцию sohr у вас передается объект, ивент события, вы его и записываете.

def sohr(event,*pasr):
    logs = open("D:\logins.txt","w")
    logs.write("{0}:{1}\n".format(logr.get(), pasr ))
    logs.close()
4kpt_II
Эмм. Зачем в функции *pasr, если вы его не передаете в bind?
ilnur
Я бы pasr все же разложил а не пихал одним объектом

P.S. На будущее - такие вопросы лучше задавать в ветке GUI…

P.S.S. Устал уже писать, но, НИКОГДА не делайте:

from tkinter import *
ilnur
4kpt_II
я вообще не понял что это такое. поэтому не трогал его :)
4kpt_II
ilnur
Ну там же явно будет набор…
ilnur
судя по *, вроде список. но откуда этот список? ведь когда мы её биндим к кнопке, кнопка передаст один параметр, эвенет события :)
4kpt_II
Я загнался. Не список, а набор.
Да Вы правы. Никто ничего не передает. Нужно передавать через lambda или писать вообще свой bind если передача постоянная и одинакова во всех bind класса
Ksey
4kpt_II
from tkinter import *
А как надо?
Кстати вот полный код(я просто учу gui, и пришло в голову сделать “форму регистрации” )(она еще не функционирует)
from tkinter import *
gl = Tk()
def sohr(event,*pasr):
    logs = open("D:\logins.txt","w")
    logs.write("{0}:{1}\n".format(logr.get(), pasr ))
    logs.close()
def reg(event):
    rg = Tk()
    reg1 = Label(rg, text="Придумате логин:", relief=FLAT)
    logr = Entry(rg, width=20,bd=3)
    reg2 = Label(rg, text="Придумайте пароль:", relief=FLAT)
    pasr = Entry(rg, width=20,bd=3)
    sogl = Button(rg, text="Я согласен с правилами, регистрация.")
    sogl.bind("<Button-1>",sohr)
    reg1.pack()
    logr.pack()
    reg2.pack()
    pasr.pack()
    sogl.pack()
login = Label(gl, text="Ваш логин:", relief=FLAT)
log = Entry(gl,width=20,bd=3)
password = Label(gl, text="Ваш пароль:", relief=FLAT)
pas = Entry(gl,width=20,bd=3)
registr = Button(gl, text="Регистрация")
registr.bind("<Button-1>",reg)
openm = Button(gl, text="Готово")
login.pack()
log.pack()
password.pack()
pas.pack()
openm.pack()
registr.pack()
gl.mainloop()
Поправьте меня насчет этого самого сохранения
4kpt_II
Если действительно хотите понять, почему нельзя, то советую почитать ЭТО

Ошибок многоватисто Не в той ветке, посему все описывать не буду.

По-поводу сохранения. Нужно понять, что вы хотите, чтобы программа сохраняла и как.
Если просто в конец текстового файла дописывала “пользователь - пароль”, тогда не нужно ничего в функцию вообще передавать а просто брать внутри:

def save_(event):
    with open("D:\logins.txt", "a") as logs:
        logs.write("{0}:{1}\n".format(logr.get(), pasr.get()))

Но я настоятельно не рекомендую так делать. Лучше уж тогда shelve использовать
Ksey
Вот пустой файл logins.txt, ты открываешь форму регистрации, регистрируешься, и в файл добавляется запись вида login:password.
И, я наверное что-то делаю не так
    logs.write("{0}:{1}\n".format(logr.get(), pasr.get()))
NameError: global name 'logr' is not defined
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB