Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 29, 2008 16:18:57

xs13
От:
Зарегистрирован: 2008-09-06
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с CSV

есть небольшой 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()

#конец кода

заранее благодарю



Офлайн

#2 Сен. 29, 2008 16:30:04

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с CSV

Тут проблема не с CSV, а с GUI частью.



Офлайн

#3 Сен. 29, 2008 16:32:05

xs13
От:
Зарегистрирован: 2008-09-06
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с CSV

shiza
Тут проблема не с CSV, а с GUI частью.
можно подробнее?
я новичок в програмировании



Офлайн

#4 Сен. 29, 2008 16:37:38

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с CSV

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()



Офлайн

#5 Сен. 29, 2008 17:03:59

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с CSV

еще, чтоб русские буковки поддерживались, при записи в CSV надо перекодировать.
Например так:
writer.writerow((nameentry.get().encode('cp1251'), lastnameentry.get().encode('cp1251')))



Отредактировано (Сен. 29, 2008 17:05:10)

Офлайн

#6 Сен. 29, 2008 17:36:43

xs13
От:
Зарегистрирован: 2008-09-06
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с CSV

о то что надо
спасибо огромное
в принципе знал что через get и что через def (уже применял), но стормозил =)

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



Офлайн

#7 Окт. 1, 2008 14:54:03

xs13
От:
Зарегистрирован: 2008-09-06
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с CSV

Спасибо за ответ на мой предыдущий вопрос.

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

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

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

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



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version