Форум сайта python.su
есть небольшой gui, в нем два поля ввода: Имя и Фамилия
при заполнении полей и нажатии на кнопку Добавить запись, данные сохраняются в CSV файл только в 1 ячейку, в виде ряда непонятных цифр. Помогите разобраться в чем дело.
Код:
# -*- coding: cp1251 -*-
from Tkinter import *
import tkMessageBox
import sys, codecs, csv
window = Tk()
window.title(u'Записная книжка')
window.minsize(width=350, height=150)
window.maxsize(width=350, height=150)
frame=Frame(window)
frame=150
frame=350
frame=1
frame=FLAT
frame.grid(row=0, column=0)
name=Label(frame,text=u“Имя:”)
name.grid(row=1, column=0, sticky=W, ipadx=5)
nameentry = Entry(frame)
nameentry.grid(row=1, column=1, sticky=W)
lastname=Label(frame,text=u“Фамилия:”)
lastname.grid(row=2, column=0, sticky=W, ipadx=5)
lastnameentry = Entry(frame)
lastnameentry.grid(row=2, column=1, sticky=W)
writer = csv.writer(open(“db.csv”, “wb”))
writer.writerow((nameentry, lastnameentry))
button=Button(frame, command=writer)
button=u“Добавить запись”
button.bind(“<Button>”)
button.grid(row=9, column=0, rowspan=10)
window.mainloop()
#конец кода
заранее благодарю
Офлайн
Тут проблема не с CSV, а с GUI частью.
Офлайн
shizaможно подробнее?
Тут проблема не с CSV, а с GUI частью.
Офлайн
1. Чтобы получить данные из объекта типа Entry, надо использовать метод get(). Например nameentry.get().
2. событие которое происходит при нажатии на кнопку, очень странно оформленно. Лучше сделатьего в виде отдельной функции.
Вот так будет выглядеть исправленный код:
# -*- coding: cp1251 -*-
from Tkinter import *
import tkMessageBox
import sys, codecs, csv
window = Tk()
window.title(u'Записная книжка')
window.minsize(width=350, height=150)
window.maxsize(width=350, height=150)
frame=Frame(window)
frame["height"]=150
frame["width"]=350
frame["borderwidth"]=1
frame["relief"]=FLAT
frame.grid(row=0, column=0)
name=Label(frame,text=u"Имя:")
name.grid(row=1, column=0, sticky=W, ipadx=5)
nameentry = Entry(frame)
nameentry.grid(row=1, column=1, sticky=W)
lastname=Label(frame,text=u"Фамилия:")
lastname.grid(row=2, column=0, sticky=W, ipadx=5)
lastnameentry = Entry(frame)
lastnameentry.grid(row=2, column=1, sticky=W)
writer = csv.writer(open("db.csv", "wb"))
def do():
writer.writerow((nameentry.get(), lastnameentry.get()))
button=Button(frame, command=do)
button["text"]=u"Добавить запись"
button.bind("<Button>")
button.grid(row=9, column=0, rowspan=10)
window.mainloop()
Офлайн
еще, чтоб русские буковки поддерживались, при записи в CSV надо перекодировать.
Например так:
writer.writerow((nameentry.get().encode('cp1251'), lastnameentry.get().encode('cp1251')))
Отредактировано (Сен. 29, 2008 17:05:10)
Офлайн
о то что надо
спасибо огромное
в принципе знал что через get и что через def (уже применял), но стормозил =)
у меня еще будут вопросы но позже
прога надеюсь будет хорошей и полезной для многих =)
Офлайн
Спасибо за ответ на мой предыдущий вопрос.
Следующие вопросы:
1) как сделать так, чтобы при добавлении новых записей в CSV файл предыдущая строка не переписывалась, а добавлялась новая? через append?
2) Как удалить строку из CSV файла?
Есть ли подобная опция в модуле CSV?
3) Как сделать так, чтобы первые два элемента строки CSV файла отображались в списке (Listbox) в GUI?
я думаю, что здесь надо вводить модуль string, извлекать строку из CSV при помощи функции readrow, разбивать ее по частям, и в листбоксе отображать индексы 0 и 1 элементов. Правильно?
Офлайн