Некоторое время назад я пытался самостоятельно написать программу - записную книжку, с возможностью добавления фото и данных о контакте на Питоне. В связи с тем, что я новичок в программировании я столкнулся с определенными трудностями в написании кода. Поэтому я решил выложить код здесь, для всеобщего ознакомления и доработки и оптимизации. Я думаю что все вместе мы сможем дописать эту программу )). Программа небольшая и на 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()