Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 21, 2014 14:21:30

Ksey
Зарегистрирован: 2014-04-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранение в файл(gui)

Всем привет, я еще новичок, и у меня такой вопрос по поводу 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>)
что делать?

Отредактировано Ksey (Апрель 21, 2014 14:24:44)

Офлайн

#2 Апрель 21, 2014 14:30:20

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

сохранение в файл(gui)

ну правильно. в функцию sohr у вас передается объект, ивент события, вы его и записываете.

def sohr(event,*pasr):
    logs = open("D:\logins.txt","w")
    logs.write("{0}:{1}\n".format(logr.get(), pasr ))
    logs.close()

Офлайн

#3 Апрель 21, 2014 14:40:50

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

сохранение в файл(gui)

Эмм. Зачем в функции *pasr, если вы его не передаете в bind?
ilnur
Я бы pasr все же разложил а не пихал одним объектом

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

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

from tkinter import *

Отредактировано 4kpt_II (Апрель 21, 2014 14:42:47)

Офлайн

#4 Апрель 21, 2014 14:42:24

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

сохранение в файл(gui)

4kpt_II
я вообще не понял что это такое. поэтому не трогал его :)

Офлайн

#5 Апрель 21, 2014 14:43:17

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

сохранение в файл(gui)

ilnur
Ну там же явно будет набор…

Отредактировано 4kpt_II (Апрель 21, 2014 14:47:42)

Офлайн

#6 Апрель 21, 2014 14:46:28

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

сохранение в файл(gui)

судя по *, вроде список. но откуда этот список? ведь когда мы её биндим к кнопке, кнопка передаст один параметр, эвенет события :)

Офлайн

#7 Апрель 21, 2014 14:48:37

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

сохранение в файл(gui)

Я загнался. Не список, а набор.
Да Вы правы. Никто ничего не передает. Нужно передавать через lambda или писать вообще свой bind если передача постоянная и одинакова во всех bind класса

Отредактировано 4kpt_II (Апрель 21, 2014 14:50:04)

Офлайн

#8 Апрель 21, 2014 15:42:19

Ksey
Зарегистрирован: 2014-04-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранение в файл(gui)

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()
Поправьте меня насчет этого самого сохранения

Отредактировано Ksey (Апрель 21, 2014 15:49:49)

Офлайн

#9 Апрель 21, 2014 15:53:08

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

сохранение в файл(gui)

Если действительно хотите понять, почему нельзя, то советую почитать ЭТО

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

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

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

Но я настоятельно не рекомендую так делать. Лучше уж тогда shelve использовать

Отредактировано 4kpt_II (Апрель 21, 2014 15:56:47)

Офлайн

#10 Апрель 21, 2014 16:01:25

Ksey
Зарегистрирован: 2014-04-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранение в файл(gui)

Вот пустой файл logins.txt, ты открываешь форму регистрации, регистрируешься, и в файл добавляется запись вида login:password.
И, я наверное что-то делаю не так

    logs.write("{0}:{1}\n".format(logr.get(), pasr.get()))
NameError: global name 'logr' is not defined

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version