Форум сайта python.su
Здравствуйте
Некоторое время назад я пытался самостоятельно написать программу - записную книжку, с возможностью добавления фото и данных о контакте на Питоне. В связи с тем, что я новичок в программировании я столкнулся с определенными трудностями в написании кода. Поэтому я решил выложить код здесь, для всеобщего ознакомления и доработки и оптимизации. Я думаю что все вместе мы сможем дописать эту программу )). Программа небольшая и на 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)
Офлайн
А что хоть дописывать надо-то?
Офлайн
Если ты используешь Tkinter, могу посоветовать заюзать ЭТО
Это враппер для tile. Дополнительные виджеты и наконец то не так не красиво выглядит Tkinter.
Вот скриншот из моего проекта например:
Отредактировано (Ноя. 1, 2008 13:52:55)
Офлайн
и еще что то я не понял что вот это должно делать…
def loadpic():
global st
pl=END
oname=askopenfilename(filetypes=[("image files","*.jpg")])
if oname:
for line in fileinput.input(oname):
st.insert(pl,line)
Офлайн
Ferromanну попробуй ее запустить
А что хоть дописывать надо-то?
Офлайн
igor.kaistспасибо, я раньше пробовал это поставить, Питон начал ругаться (
Если ты используешь Tkinter, могу посоветовать заюзать ЭТО
Это враппер для tile. Дополнительные виджеты и наконец то не так не красиво выглядит Tkinter.
Вот скриншот из моего проекта например:
http://soft.mobile-master.org/files/smzzz/full.jpg
Офлайн
Посмотрел внимательно на код.
Всё плохо.
Функционал и гуй должны быть разделены.
Ни строчки комментариев или документации.
Нет даже цели. А если нет цели….
Тут не в функционале дело. Такой код трудно нормально дописывать или поддерживать.
Короче, так дело не пойдёт.
Офлайн
Ferromanв свободное время напишу каменты
Посмотрел внимательно на код.
Всё плохо.
Функционал и гуй должны быть разделены.
Ни строчки комментариев или документации.
Нет даже цели. А если нет цели….
Тут не в функционале дело. Такой код трудно нормально дописывать или поддерживать.
Короче, так дело не пойдёт.
Офлайн
Дело даже не в каментах :) код небольшой, но уже запутанный :) в дальнейшем будут проблемы при расширении программы.
Кстати код не запускается, так как он требует еще и картинок, которые есть у тебя, но нет у нас.
Офлайн
насчет картинок я в курсе, вставь по указанному пути в коде любую картинку с таким именем размер допустим 64 на 64 и посмотри как работает программа
Офлайн