Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 1, 2008 09:28:04

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

программа-записная книжка

Здравствуйте

Некоторое время назад я пытался самостоятельно написать программу - записную книжку, с возможностью добавления фото и данных о контакте на Питоне. В связи с тем, что я новичок в программировании я столкнулся с определенными трудностями в написании кода. Поэтому я решил выложить код здесь, для всеобщего ознакомления и доработки и оптимизации. Я думаю что все вместе мы сможем дописать эту программу )). Программа небольшая и на 70 % готова.

# -*- coding: cp1251 -*-
from Tkinter import *
from tkFileDialog import *
from ScrolledText import *
import tkMessageBox
import sys, Image, ImageTk, fileinput
import csv

st=None

def die():
sys.exit(0)

def loadpic():
global st
pl=END
oname=askopenfilename(filetypes=[("image files","*.jpg")])
if oname:
for line in fileinput.input(oname):
st.insert(pl,line)

def addnew():
w=Toplevel()
w.title(u'Личные данные')
w.minsize(width=450, height=200)
w.maxsize(width=450, height=200)
w.configure(bg="white")

frame=Frame(w, bg="white")
frame["height"]=160
frame["width"]=450
frame["borderwidth"]=1
frame["relief"]=FLAT
frame.pack()

imtk = ImageTk.PhotoImage(file = "Pics/2.jpg")

foto = Label(frame, image=imtk)
foto.grid(row=0,column=0, rowspan=8, padx=10, pady=10)

name=Label(frame,text=u"Имя:", bg="white")
name.grid(row=0,column=1)
nameentry = Entry(frame, bg="white",relief="flat")
nameentry.insert(0,u"Гомер")
nameentry.grid(row=0,column=2, sticky=W)

lastname=Label(frame,text=u"Фамилия:", bg="white")
lastname.grid(row=1,column=1)
lastnameentry = Entry(frame, bg="white",relief="flat")
lastnameentry.insert(0,u"Симпсон")
lastnameentry.grid(row=1,column=2, sticky=W)

birth=Label(frame,text=u"Дата рождения:", bg="white")
birth.grid(row=2,column=1)
birthentry = Entry(frame, width=10, bg="white",relief="flat")
birthentry.insert(0,"22.03.1964")
birthentry.grid(row=2,column=2, sticky=W)

job=Label(frame,text=u"Род занятий:", bg="white")
job.grid(row=3,column=1)
jobentry = Entry(frame, width=30, bg="white",relief="flat")
jobentry.insert(0,u"Оператор атомной станции")
jobentry.grid(row=3,column=2, sticky=W)

adress=Label(frame,text=u"Адрес:", bg="white")
adress.grid(row=4,column=1)
adressentry = Entry(frame, width=30, bg="white",relief="flat")
adressentry.insert(0,u"Спрингфилд, NC")
adressentry.grid(row=4,column=2, sticky=W)

phone=Label(frame,text=u"Телефон:", bg="white")
phone.grid(row=5,column=1)
phoneentry = Entry(frame, width=13, bg="white",relief="flat")
phoneentry.insert(0,u"80295379915")
phoneentry.grid(row=5,column=2, sticky=W)

email=Label(frame,text=u"Email:", bg="white")
email.grid(row=6,column=1)
emailentry = Entry(frame, width=30, bg="white",relief="flat")
emailentry.insert(0,u"homersimpson@gmail.com")
emailentry.grid(row=6,column=2, sticky=W)

other=Label(frame,text=u"Прочее:", bg="white")
other.grid(row=7, column=1)
otherentry = Entry(frame, text=u"", bg="white",relief="flat")
otherentry.grid(row=7, column=2, sticky=W)

writer = csv.writer(open("db.csv", "wb"))

def do():
writer.writerow((nameentry.get().encode('cp1251'), lastnameentry.get().encode('cp1251'), birthentry.get(), jobentry.get().encode('cp1251'), adressentry.get().encode('cp1251'), phoneentry.get(), emailentry.get(), otherentry.get().encode('cp1251')))

button=Button(frame, bg="white", activebackground="green", command=loadpic)
button["text"]=u"Загрузить фото"
button.bind("<Button>")
button.grid(row=10, column=0, sticky=S, pady=10)

button=Button(frame, bg="white", activebackground="green", command=do)
button["text"]=u"Сохранить запись"
button.bind("<Button>")
button.grid(row=10, column=2, sticky=S, pady=10)


w.mainloop()


def search():
s=Toplevel()
s.title(u"О программе")
s.configure(bg="white")
at=Label(s, text=u"Найти:", bg="white")
sf=Entry(s, bg="white", width=30, relief="flat")
sf.grid(row=0,column=1,ipady=10, ipadx=5)
at.grid(row=0,column=0,ipady=10, ipadx=5)
s.minsize(width=300, height=40)
s.maxsize(width=300, height=40)
button=Button(s, bg="white", activebackground="green", text=u"Поиск")
button.bind("<Button>")
button.grid(row=0, column=3, padx=5, pady=5, sticky=N+S)



def about():
aboutw=Toplevel()
aboutw.title(u"О программе")
aboutw.configure(bg="grey")
at=Label(aboutw, text=u"Программа распространяется\nсвободно. Ваши отзывы и\n\
пожелания отправляйте на\n\
email: slavarybalko@gmail.com\n\
\n\
Вы можете поспособствовать\n\
развитию этой программы:\n\
Мой кошелек: Z4535356365\n\
\n\
Автор программы: xs13.", bg="grey")
at.grid(row=0,column=0,ipady=5)
aboutw.minsize(width=200, height=180)
aboutw.maxsize(width=200, height=180)




window = Tk()
window.title(u'Записная книжка')
window.minsize(width=480, height=470)
window.maxsize(width=480, height=470)

bar=Menu(window)

elements=[u"Роман Гулаков", u"Гомер Симпсон", u"Гомер Симпсон", u"Гомер Симпсон", u"Гомер Симпсон", u"Гомер Симпсон", u"Гомер Симпсон", u"Гомер Симпсон", u"Гомер Симпсон", u"Гомер Симпсон", u"Гомер Симпсон", u"Гомер Симпсон", u"Гомер Симпсон", u"Гомер Симпсон", u"Гомер Симпсон", u"Дед Слава"]

filem = Menu(bar)
filem.add_command(label=u"Открыть...")
filem.add_command(label=u"Добавить запись...", command=addnew)
filem.add_command(label=u"Сохранить")
filem.add_separator()
filem.add_command(label=u"Выход", command=die)

helpm = Menu(bar)
helpm.add_command(label=u"Найти...", command=search)
helpm.add_separator()
helpm.add_command(label=u"О программе", command=about)

bar.add_cascade(label=u"Файл", menu=filem)
bar.add_cascade(label=u"Помощь", menu=helpm)

frame=Frame(window, bg="white")
frame["height"]=450
frame["width"]=480
frame["borderwidth"]=1
frame["relief"]=FLAT
frame.grid(row=0, column=0)

imtk = ImageTk.PhotoImage(file = "Pics/2.jpg")
foto = Label(frame, image=imtk, bg="white")
foto.grid(row=0, column=0, ipadx=80, ipady=15, rowspan=1, columnspan=2, sticky=W)

name=Label(frame,text=u"Имя:", bg="white")
name.grid(row=1, column=0, sticky=W, ipadx=5)
nameentry = Label(frame, text=u"Гомер", bg="white")
nameentry.grid(row=1, column=1, sticky=W)

lastname=Label(frame,text=u"Фамилия:", bg="white")
lastname.grid(row=2, column=0, sticky=W, ipadx=5)
lastnameentry = Label(frame, text=u"Симпсон", bg="white")
lastnameentry.grid(row=2, column=1, sticky=W)

birth=Label(frame,text=u"Дата рождения:", bg="white")
birth.grid(row=3, column=0, sticky=W, ipadx=5)
birthentry = Label(frame, text="22.03.1964", bg="white")
birthentry.grid(row=3, column=1, sticky=W)

job=Label(frame,text=u"Род занятий:", bg="white")
job.grid(row=4, column=0, sticky=W, ipadx=5)
jobentry = Label(frame, text=u"Оператор атомной станции", bg="white")
jobentry.grid(row=4, column=1, sticky=W)

adress=Label(frame,text=u"Адрес:", bg="white")
adress.grid(row=5, column=0, sticky=W, ipadx=5)
adressentry = Label(frame, text=u"Спрингфилд, NC", bg="white")
adressentry.grid(row=5, column=1, sticky=W)

phone=Label(frame,text=u"Телефон:", bg="white")
phone.grid(row=6, column=0, sticky=W, ipadx=5)
phoneentry = Label(frame, text="80295379915", bg="white")
phoneentry.grid(row=6, column=1, sticky=W)

email=Label(frame,text=u"Email:", bg="white")
email.grid(row=7, column=0, sticky=W, ipadx=5)
emailentry = Label(frame,text=u"homersimpson@gmail.com", bg="white")
emailentry.grid(row=7, column=1, sticky=W)

other=Label(frame,text=u"Прочее:", bg="white")
other.grid(row=8, column=0, sticky=W, ipadx=5)
otherentry = Label(frame, text=u"", bg="white")
otherentry.grid(row=8, column=1, sticky=W)

button=Button(frame, bg="white", activebackground="green", command=addnew)
button["text"]=u"Добавить новую запись"
button.bind("<Button>")
button.grid(row=25, column=0, padx=5, sticky=S)

button=Button(frame, bg="white", activebackground="blue")
button["text"]=u"Редактировать текущую запись"
button.bind("<Button>")
button.grid(row=25, column=1, sticky=S)

button=Button(frame, bg="white", activebackground="red")
button["text"]=u"Удалить текущую запись"
button.bind("<Button>")
button.grid(row=25, column=2, sticky=S)

list=Listbox(frame, width=23, height=30, selectbackground="red")
sb = Scrollbar(frame, background="#000fff000", activebackground="red")
list.config(yscrollcommand=sb.set)
sb.config(command=list.yview)

list.grid(row=0,column=2, rowspan=18, padx=5, pady=1, sticky=W)
sb.grid(row=0,column=2,rowspan=18, pady=2, sticky=E+N+S)

for i in elements :
list.insert(0, i)

noe=list.index(END)
result=Label(frame, text=noe, bg="white")
result.grid(row=26, column=2, ipadx=36, sticky=W)
total=Label(frame, text=u"человек(a) в базе", bg="white")
total.grid(row=26, column=2, sticky=E)

window.config(menu=bar)
window.mainloop()



Отредактировано (Ноя. 1, 2008 09:31:39)

Офлайн

#2 Ноя. 1, 2008 13:05:23

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

программа-записная книжка

А что хоть дописывать надо-то?

Офлайн

#3 Ноя. 1, 2008 13:49:45

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

программа-записная книжка

Если ты используешь Tkinter, могу посоветовать заюзать ЭТО
Это враппер для tile. Дополнительные виджеты и наконец то не так не красиво выглядит Tkinter.
Вот скриншот из моего проекта например:



Отредактировано (Ноя. 1, 2008 13:52:55)

Офлайн

#4 Ноя. 1, 2008 14:42:34

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

программа-записная книжка

и еще что то я не понял что вот это должно делать…

def loadpic():
global st
pl=END
oname=askopenfilename(filetypes=[("image files","*.jpg")])
if oname:
for line in fileinput.input(oname):
st.insert(pl,line)



Офлайн

#5 Ноя. 1, 2008 14:48:39

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

программа-записная книжка

Ferroman
А что хоть дописывать надо-то?
ну попробуй ее запустить
в программе еще толком не реализована функция чтения/записи в CSV файл.
Моих познаний не хватает пока еще, чтобы реализовать это.



Офлайн

#6 Ноя. 1, 2008 14:53:42

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

программа-записная книжка

igor.kaist
Если ты используешь Tkinter, могу посоветовать заюзать ЭТО
Это враппер для tile. Дополнительные виджеты и наконец то не так не красиво выглядит Tkinter.
Вот скриншот из моего проекта например:
http://soft.mobile-master.org/files/smzzz/full.jpg
спасибо, я раньше пробовал это поставить, Питон начал ругаться (



Офлайн

#7 Ноя. 1, 2008 15:15:34

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

программа-записная книжка

Посмотрел внимательно на код.
Всё плохо.
Функционал и гуй должны быть разделены.
Ни строчки комментариев или документации.
Нет даже цели. А если нет цели….

Тут не в функционале дело. Такой код трудно нормально дописывать или поддерживать.
Короче, так дело не пойдёт.

Офлайн

#8 Ноя. 2, 2008 00:53:55

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

программа-записная книжка

Ferroman
Посмотрел внимательно на код.
Всё плохо.
Функционал и гуй должны быть разделены.
Ни строчки комментариев или документации.
Нет даже цели. А если нет цели….

Тут не в функционале дело. Такой код трудно нормально дописывать или поддерживать.
Короче, так дело не пойдёт.
в свободное время напишу каменты



Офлайн

#9 Ноя. 2, 2008 09:06:02

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

программа-записная книжка

Дело даже не в каментах :) код небольшой, но уже запутанный :) в дальнейшем будут проблемы при расширении программы.
Кстати код не запускается, так как он требует еще и картинок, которые есть у тебя, но нет у нас.



Офлайн

#10 Ноя. 2, 2008 14:23:16

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

программа-записная книжка

насчет картинок я в курсе, вставь по указанному пути в коде любую картинку с таким именем размер допустим 64 на 64 и посмотри как работает программа



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version