Найти - Пользователи
Полная версия: помогите с CSV
Начало » Базы данных » помогите с CSV
1
xs13
есть небольшой 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()

#конец кода

заранее благодарю
shiza
Тут проблема не с CSV, а с GUI частью.
xs13
shiza
Тут проблема не с CSV, а с GUI частью.
можно подробнее?
я новичок в програмировании
shiza
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()
shiza
еще, чтоб русские буковки поддерживались, при записи в CSV надо перекодировать.
Например так:
writer.writerow((nameentry.get().encode('cp1251'), lastnameentry.get().encode('cp1251')))
xs13
о то что надо
спасибо огромное
в принципе знал что через get и что через def (уже применял), но стормозил =)

у меня еще будут вопросы но позже
прога надеюсь будет хорошей и полезной для многих =)
xs13
Спасибо за ответ на мой предыдущий вопрос.

Следующие вопросы:

1) как сделать так, чтобы при добавлении новых записей в CSV файл предыдущая строка не переписывалась, а добавлялась новая? через append?

2) Как удалить строку из CSV файла?
Есть ли подобная опция в модуле CSV?

3) Как сделать так, чтобы первые два элемента строки CSV файла отображались в списке (Listbox) в GUI?
я думаю, что здесь надо вводить модуль string, извлекать строку из CSV при помощи функции readrow, разбивать ее по частям, и в листбоксе отображать индексы 0 и 1 элементов. Правильно?
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