Форум сайта python.su
0
Всем привет, я еще новичок, и у меня такой вопрос по поводу 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)
)Отредактировано Ksey (Апрель 21, 2014 14:24:44)
Офлайн
22
ну правильно. в функцию sohr у вас передается объект, ивент события, вы его и записываете.
def sohr(event,*pasr): logs = open("D:\logins.txt","w") logs.write("{0}:{1}\n".format(logr.get(), pasr )) logs.close()
Офлайн
58
Эмм. Зачем в функции *pasr, если вы его не передаете в bind?
ilnur
Я бы pasr все же разложил а не пихал одним объектом 
P.S. На будущее - такие вопросы лучше задавать в ветке GUI…
P.S.S. Устал уже писать, но, НИКОГДА не делайте:
from tkinter import *
Отредактировано 4kpt_II (Апрель 21, 2014 14:42:47)
Офлайн
22
4kpt_II
я вообще не понял что это такое. поэтому не трогал его :)
Офлайн
58
ilnur
Ну там же явно будет набор…
Отредактировано 4kpt_II (Апрель 21, 2014 14:47:42)
Офлайн
22
судя по *, вроде список. но откуда этот список? ведь когда мы её биндим к кнопке, кнопка передаст один параметр, эвенет события :)
Офлайн
58
Я загнался. Не список, а набор.
Да Вы правы. Никто ничего не передает. Нужно передавать через lambda или писать вообще свой bind если передача постоянная и одинакова во всех bind класса 
Отредактировано 4kpt_II (Апрель 21, 2014 14:50:04)
Офлайн
0
4kpt_IIА как надо?
from tkinter import *
)(она еще не функционирует)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)
Офлайн
58
Если действительно хотите понять, почему нельзя, то советую почитать ЭТО
Ошибок многоватисто
Не в той ветке, посему все описывать не буду.
По-поводу сохранения. Нужно понять, что вы хотите, чтобы программа сохраняла и как.
Если просто в конец текстового файла дописывала “пользователь - пароль”, тогда не нужно ничего в функцию вообще передавать а просто брать внутри:
def save_(event): with open("D:\logins.txt", "a") as logs: logs.write("{0}:{1}\n".format(logr.get(), pasr.get()))
Отредактировано 4kpt_II (Апрель 21, 2014 15:56:47)
Офлайн
0
Вот пустой файл logins.txt, ты открываешь форму регистрации, регистрируешься, и в файл добавляется запись вида login:password.
И, я наверное что-то делаю не так
logs.write("{0}:{1}\n".format(logr.get(), pasr.get())) NameError: global name 'logr' is not defined
Офлайн