Найти - Пользователи
Полная версия: программа-записная книжка
Начало » GUI » программа-записная книжка
1 2
xs13
Здравствуйте

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

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

Тут не в функционале дело. Такой код трудно нормально дописывать или поддерживать.
Короче, так дело не пойдёт.
в свободное время напишу каменты
igor.kaist
Дело даже не в каментах :) код небольшой, но уже запутанный :) в дальнейшем будут проблемы при расширении программы.
Кстати код не запускается, так как он требует еще и картинок, которые есть у тебя, но нет у нас.
xs13
насчет картинок я в курсе, вставь по указанному пути в коде любую картинку с таким именем размер допустим 64 на 64 и посмотри как работает программа
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