python3.2 寫的一個日記本

來源:互聯網
上載者:User

這是我費了一個晚上辛辛苦苦寫的,希望對大家學習python有協助

你可以更改其內容重新發布

本程式使用的sqlite3儲存資料,還沒有尋找功能,待日後在寫

源碼如下:(儲存為MyNote.pyw)

from tkinter import * #Frame,Menu,Tk,Entry
from tkinter.scrolledtext import ScrolledText
from tkinter import ttk
import os
import time

import sqlite3
class MSqlite3:
    def __init__ (self, path):
        self.path = path
        if not os.path.isfile(path):
            self.CreateDB()
        else:
            self.conn = sqlite3.connect(path)
    def CreateDB (self):
        self.conn = sqlite3.connect(self.path)
        c = self.conn.cursor()
        c.execute('''create table MyNote(
Title text,
Note text,
date datetime
)''')
        c.close()
    def InsertData (self, data):
        #print ('插入資料',data)
        c = self.conn.cursor()
        for t in data:
            c.execute('insert into MyNote values (?,?,?);', t)
        self.conn.commit()
        c.close()
    def SelectData (self, ResultForm='Title,Note,date', Condition=''):#Condition="date='2011-4-11 0:13:53'"  ResultForm,Condition都是str
        c = self.conn.cursor()
        strsql = 'select '+ResultForm+' from MyNote '
        if len(Condition)>0:
            strsql += 'where '+Condition
        c.execute(strsql)
        #print('選擇資料語句',strsql)
        data = []
        for row in c:
            data.append(row)
        c.close()
        return data
    def UpdateData(self, DataCondition): # DataCondition格式(Title,Note,date,Title)
        c = self.conn.cursor()
        c.execute('update MyNote set Title=?,Note=?,date=? where Title=?', DataCondition)
        #print('更新資料:', c.rowcount)
        self.conn.commit()
        c.close()
    def DeleteData(self, Condition):
        c = self.conn.cursor()
        c.execute("delete from MyNote where Title=?",(Condition,))
        #print('刪除資料:', c.rowcount)
        self.conn.commit()
        c.close()
    def __del__ (self):
        self.conn.close()

class MyNote(Frame):
    def __init__(self, master=None, cnf={}, **kw):
        self.master = master
        self.master.title('日記本')
        self.combo = ttk.Combobox(master)
        self.combo.pack(side=TOP, fill = 'x', expand = False)
        width = self.combo.winfo_width()
        self.combo.event_generate('<ButtonPress-1>', x=width - 5, y=5)
        self.combo.event_generate('<ButtonRelease-1>', x=width - 5, y=5)
        self.combo.update_idletasks()
       
        self.text = ScrolledText(master)
        self.text.pack(side = BOTTOM, fill = 'both', expand = True)
        self.text.bind("<ButtonPress-3>", self.popup_event)
       
        self.menu = None
        self.db = MSqlite3('./DB.dat')
       
        self.combo.bind('<<ComboboxSelected>>',self.SelectCombobox)
        self.combo.bind('<ButtonPress-1>',self.ListDown)
    def ListDown(self, event):
        #print('滑鼠下')
        self.FullCombobox()
    def FullCombobox(self):
        rtdata = self.db.SelectData(ResultForm='Title')
        comlist = []
        for row in rtdata:
            comlist.append(row[0])
        self.combo['values'] = comlist
    def SelectCombobox(self,event):
        rtdata = self.db.SelectData(Condition="Title='"+self.combo.get()+"'")
        #print('檔案中:',self.text.get(0.0,END))
        for (title,note,date) in rtdata:
            #print('資料庫中note',note)
            self.text.delete(0.0,len(self.text.get(0.0,END))-1.0)
            self.text.insert(0.0,note)
            self.master.title('日記本-'+date)
    def popup_event(self, event):
        if not self.menu:
            self.menu = Menu(self.text, tearoff=0)
            self.menu.add_command(label='複製',command=self.menucopy)
            self.menu.add_command(label='剪下',command=self.menucut)
            self.menu.add_command(label='粘貼',command=self.menupaste)
            self.menu.add_separator()
            self.menu.add_command(label="儲存",command=self.Save)
           
        self.menu.tk_popup(event.x_root, event.y_root)
    def menucopy(self):
        if not self.text.tag_ranges("sel"):
            # There is no selection, so do nothing and maybe interrupt.
            return
        self.text.event_generate("<<Copy>>")
    def menucut(self):
        self.text.event_generate("<<Cut>>")
    def menupaste(self):
        self.text.event_generate("<<Paste>>")
        self.text.see("insert")
    def Save (self):
        #Title Note date
        titl = self.combo.get()
        note = self.text.get(1.0, END)
        dtime = time.strftime('%Y-%m-%d %H:%M:%S')
        self.master.title('日記本-'+dtime)
        #print('檔案內容',len(note),note)
        if len(note.replace('/n',''))==0:
            self.db.DeleteData(titl)
            return
        rtdata = self.db.SelectData(ResultForm='Title' ,Condition="Title='"+titl+"'")
        if len(rtdata)>0:
            self.db.UpdateData((titl,note,
                            dtime,titl))
            #print('updata', rtdata)
        else:
            data = [(titl,note,dtime)]
            #print('Save', data)
            self.db.InsertData(data)       
    def __del__ (self):
        #self.Save()
        print('MyNote析構')
       
if __name__ == "__main__":
    root = Tk()
    note = MyNote(root)
    note.text.insert(1.0,"""這是一個簡單的日記本,
右鍵菜單<儲存>:
如果日記名不存在會儲存,
如果日記名已存在會更新,
如果檔案日記內容為空白會刪除日記.""")
    root.mainloop()
   

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.