Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранитель закладок - моя первая программа)), Может кому из новичков пригодиться. 
:(
    Опции темы
RM2010
  Дата 21.2.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 29.1.2010

Репутация: 3
Всего: 2



Спустя ~3 недели с момента начало изучения Питона написал свою первую, небольшую программку по хранению букмарков.
Может кому из новичков в виде референса пригодиться. smile 

user posted image

Код

from tkinter import *
import tkinter.messagebox
import webbrowser

mainwin = Tk()
mainwin.title("BOOKMARKS 101")

mainwin.geometry('310x410+600+350')
mainwin.wm_iconbitmap('Comment.ico')
bottomurl = StringVar()
accdec = StringVar()
accdec.set("acc")

bookhash = {}

def addnewbookmark():

    def closeapp():
        addnewapp.destroy()

    def savenew():
        addmark( bm1.get() , bm2.get() )
        addnewapp.destroy()        

    addnewapp = Tk()
    addnewapp.title("Add new bookmark")
    addnewapp.geometry('300x150+615+365')
    addnewapp.wm_iconbitmap('Comment.ico')
    
    bl1 = Label( addnewapp, text = "bookmark name:" )
    bl1.pack(side=TOP)

    bm1 = Entry( addnewapp, width = 35 )
    bm1.pack(side=TOP)

    bl2 = Label( addnewapp, text = "bookmark itself:" )
    bl2.pack(side=TOP)

    bm2 = Entry( addnewapp, width = 35 )
    bm2.pack(side=TOP)
    bm2.insert(0,"http://")

    lx = bl1 = Label( addnewapp, text = "                     " )
    lx.pack(side=LEFT, padx = 15 )

    bb1 = Button ( addnewapp, text = "ADD", command = savenew )
    bb1.pack(side=LEFT, padx = 5 )
    bb2 = Button ( addnewapp, text = "CANCEL", command = closeapp )
    bb2.pack(side=LEFT, padx = 5 )

    addnewapp.mainloop()

def restorefile():
    bookhash = {}
    bookhash['zinas']='http://www.apollo.lv'
    bookhash['radio']='http://www.latvijasradio.lv'
    bookhash['banka']='http://www.hanzanet.lv'
    bookhash['info']='http://www.1188.lv'
    bookhash['karte']='http://www.uzkartes.lv'
    bookhash['google']='http://www.google.com'
    workfile = open("bookmarks.txt","w")
    for s in bookhash:
        workfile.write("%s^^^%s\n" % (s , bookhash[s]) )
    workfile.close()   
    print("file restored!")

def readfromfile():
    try:
        bookhash.clear()
        workfile = open("bookmarks.txt")
        print("\n* READING FILE: *")
        for each_line in workfile:
            if len(each_line) > 1:
                a = each_line
                c = a.find("^^^")
                print( "%s = %s" % ( a[0:c],a[c+3:len(a)-1]) )
                bookhash[a[0:c]]=a[c+3:len(a)-1]
        workfile.close()  
    except Exception as x:
        print(x)        
        restorefile()
        readfromfile()
    
readfromfile()

def addmark(a,b):
    print("\n'%s' added!" % a )
    bookhash[a]=b
    savetofile()
    readfromfile()
    populate()

def deletebookmark(a):
    del bookhash[a]
    savetofile()
    
def savetofile():
    workfile = open("bookmarks.txt","w")
    for s in sorted(bookhash.keys()):
        workfile.write("%s^^^%s\n" % (s , bookhash[s]) )
    workfile.close()   
    print("file saved!")

def delete():
    if tkinter.messagebox.askquestion("WARNING!","Are you sure you want to delete '%s' ?" % biglist.get( biglist.curselection() ) ) == "yes":
        print("\n'%s' deleted!" % biglist.get( biglist.curselection() ) )
        deletebookmark(biglist.get( biglist.curselection() ))
        populate()

def goto():
    url = bookhash[  biglist.get( biglist.curselection() )  ]
    print("Goto %s" % url )
    webbrowser.open_new(url)

def about():
    messagebox.showinfo("BOOKMARKS 101", "© Robert Mikelson \n      2010")

def populate():
    biglist.delete(0, biglist.size() )
    if accdec.get() == "acc":
        for s in sorted(bookhash.keys()):
            biglist.insert(END, s)
    else:
         for s in sorted(bookhash.keys(), reverse = True ):
            biglist.insert(END, s)      

def readnpopulate():
    readfromfile()
    populate()

def localrestorefile():
    restorefile()
    readnpopulate()


# icons for the buttons
iconadd=PhotoImage(file='Add.gif')
icondel=PhotoImage(file='Delete.gif')
icongoto=PhotoImage(file='Goto.gif') 

# topmenu
topmenu = Menu(mainwin)
filemenu = Menu(topmenu, tearoff=0)
topmenu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="Add", command = addnewbookmark)
filemenu.add_command(label="Delete", command = delete)
filemenu.add_command(label="Goto", command = goto)
filemenu.add_separator()
filemenu.add_command(label="Save to file", command = savetofile )
filemenu.add_command(label="Restore file", command = localrestorefile )
filemenu.add_separator()
filemenu.add_command(label="Exit", command = mainwin.destroy)
editmenu = Menu(topmenu, tearoff=0)
topmenu.add_cascade(label="Sort", menu=editmenu)
editmenu.add_radiobutton(label="Ascending (up)", variable = accdec , value = "acc", command = populate )
editmenu.add_radiobutton(label="Descending (down)", variable = accdec , value = "dec", command = populate )
helpmenu = Menu(topmenu, tearoff=0)
topmenu.add_cascade(label="Help", menu=helpmenu)
helpmenu.add_command(label="Read from file", command = readnpopulate)
helpmenu.add_separator()
helpmenu.add_command(label="About", command = about)

# buttons
addbtn = Button (mainwin, image=iconadd, command = addnewbookmark )
addbtn.grid(row=1, column=0, padx=8, pady=5)
delbtn = Button (mainwin, image=icondel, command = delete )
delbtn.grid(row=1, column=1, padx=8, pady=5)
gotobtn = Button (mainwin, image=icongoto, command = goto )
gotobtn.grid(row=1, column=2, padx=8, pady=5)

# listbox
biglist = Listbox ( mainwin, heigh = 18, width = 45,  )
biglist.grid(row=2, column=0, columnspan=2000, padx=5 ,pady=5)
scrollbar = Scrollbar(mainwin)
scrollbar.grid(row=2, column=2000, sticky=(N,S))

# attach listbox to scrollbar
biglist.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=biglist.yview)

def dolistbox(a):   # when clicked on the listbox
    bottomurl.set(bookhash[  biglist.get( biglist.curselection() )  ])

# populate & operate listbox
populate()
biglist.bind("<Double-Button-1>", dolistbox ) # when clicked, do "dolistbox" func.

# bottom label
bottomlabel = Label ( mainwin, textvariable = bottomurl )
bottomlabel.grid(row=3, column=0, columnspan=2125, padx=5 )

# closing up
mainwin.config(menu=topmenu)
mainwin.mainloop()


Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  BM.zip 15,61 Kb
PM MAIL   Вверх
BlindBandiit
Дата 22.2.2010, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 23.8.2009

Репутация: нет
Всего: нет



да уж функциональностью просто зашкаливает smile)
 smile  А  вообще Гууд  все начинают с такова  ,  по коду критиковать не могу так  как  сам ещё  новичок  молодцом  так держать  думаю следующие  программки будут куда  полезней и интересней
PM MAIL   Вверх
bilbobagginz
Дата 22.2.2010, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: нет
Всего: 317



RM2010, скажи, а виндовый питон и дет уже с предустановленным модулем tkinter ?



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
RM2010
Дата 22.2.2010, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 29.1.2010

Репутация: 3
Всего: 2



Цитата(bilbobagginz @ 22.2.2010,  01:22)
RM2010, скажи, а виндовый питон и дет уже с предустановленным модулем tkinter ?

Видать да, не припомню чтоб я его отдельно инсталлировал. За то уже прочитал про существование GTK, на днях попробую поставить Ubuntu и начну осваивать GTK. smile 
PM MAIL   Вверх
mr.Anderson
Дата 22.2.2010, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 6
Всего: 128




M
mr.Anderson
Модератор: пожалуйста, отражайте в названии темы ее суть, чтобы все знали, о какой программе идет речь. Заголовок исправил, но это только для примера, в первый и последний раз.



--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Тестирование программ"
mr.Anderson

Правила должны соблюдаться всеми без исключения.

  • Темы, в которых будут обнаружены нарушения, будут закрыты или удалены.
  • К пользователям, многократно нарушившим правила, будут применены отдельные санкции.

Для тех, кто создаёт темы:

В данном разделе запрещается размещать программы, которые в той или иной степени могут принести вред потенциальному тестеру программы (например, трояны, вирусы и т.д.)

  • Публикуя ссылку на программу, обязательно проверьте её работоспособность.
  • ОБЯЗАТЕЛЬНО: напишите название программы, а главное - её описание и приведите хотя бы один скриншот. Скриншот по размерам не более 500х500 пикселов, для скриншотов большего размера приводите ссылки на них.
  • Программа, которую Вы даёте на тестирование, должна быть откомпилирована, так как не каждый является программистом, да и мало кто будет ради тестирования устанавливать соответствующий софт.

Для тех, кто тестирует:

Описывая результаты тестирования программы, указывайте тип и версию ОС, а также характеристики компьютера и прочую информацию, которая может повлиять на работоспособность.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.Anderson.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разное тестирование | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.