1. 程式人生 > >Tkinter小專案:用Python寫一個地址收藏管理工具,迅速提高你的工作效率

Tkinter小專案:用Python寫一個地址收藏管理工具,迅速提高你的工作效率

如何管理雜亂的電腦桌面和一大堆的瀏覽器收藏網址?我用python寫了一個工具,迅速提高工作效率。

工作了一段時間發現,電腦桌面上已經滿屏的常用軟體、常用專案資料夾的快捷方式,一大堆的常用文件,瀏覽器上收藏的工作網址更是有100+,通常想開啟一個文件、網址要尋找半天,有沒有方法可以集中管理這些地址呢? 我用python tkinter + webbrowser寫了一個地址收藏工具

功能:

  • 關鍵字搜尋,字母不區分大小寫。
  • 新增:URL網址,本地軟體路徑,本地文件路徑
  • 雙擊/敲回車鍵快捷開啟
  • 選中刪除
  • 修改:可使用新增功能,支援同名覆蓋

原理:

  • 匯入庫 tkinter,webbrowser均為python標準庫,不需要另外安裝

    import tkinter as tk
    import json
    import webbrowser
    from tkinter import messagebox
    from tkinter import *
    
  • 使用python自帶介面開發庫tkinter開發基本介面

    if __name__ == '__main__':
        root = Tk()  # 構造窗體
        root.title('Open Everything') # 標題
        root.iconbitmap('opentool.ico') # 載入圖示
    
        root.resizable(0,0) # 固定視窗大小
    app = Application(master=root)
  • 讀取json檔案,載入資料到Listbox

    self.urllist = self.readUrlList() # 獲取列表
    if self.urllist:
        self.createWidgets()
        self.mainloop()
    else:
        messagebox.showinfo('Error','讀取地址列表失敗!請檢視openlist.json檔案是否存在並且格式正確。')
    
    
    # 載入地址列表
        for item in self.urllist:
            self.listbox.
    insert(END, item) # 從尾部插入
  • 新增事件處理

    def doevent(self):
        self.keywdbox.bind("<Return>",self.showlist) # 按回車鍵,顯示搜尋結果
        self.keywdbox.bind("<BackSpace>",self.showlistAll)
        self.listbox.bind('<Double-Button-1>',self.openurl) # 雙擊開啟地址
        self.listbox.bind('<Return>',self.openurl) # 按Enter鍵開啟地址
    
  • 使用webbrowser.open(url)方法開啟路徑. 這個方法比較強大,如果是http地址,會直接在瀏覽器中開啟,如果是本地地址,會直接開啟本地的軟體/資料夾/文件等

    def openurl(self,event):
        urlname = self.listbox.get(self.listbox.curselection())
        url = self.urllist[urlname] # 根據key值獲取對應url值
    
        if url is not None and url != '':
            webbrowser.open(url)
        else:
            messagebox.showinfo('Error !', '開啟地址失敗!地址為空。')
    
  • 搜尋功能 搜尋功能實現比較簡單,遍歷字典key值,判斷關鍵字是否存在key中

    def showlist(self, event):
        keywd = self.keywdbox.get().strip()
        if keywd:
            self.listbox.delete(0, END) # 先做清空列表動作
    
            for item in self.urllist:
                if keywd.lower() in item.lower():   # 判斷關鍵字是否存在字典key中
                    self.listbox.insert(END, item)  # 載入搜尋結果
    
  • 退出軟體時重新儲存json檔案

    def savaUrllist(self):
        with open('openlist.json', 'w', encoding='utf-8') as f:
            json.dump(self.urllist,f, ensure_ascii=False, indent=2)
    
        print('檔案儲存成功。')
    
  • 打包軟體 win下使用pyinstaller Mac下使用py2app

使用教程

更新 – 20180916 Thinks for @CYDROM’s pull requests

更新點:

  • 增加實時查詢:輸入中開始查詢;
  • 拼音查詢,拼音首字母查詢:全拼或拼音首字母查詢;
    • 安裝第三方包pip install pypinyin
from pypinyin import Style
import pypinyin
......
	def showlist(self, event):
        keywd = self.keywdbox.get().strip()
        if keywd:
            self.listbox.delete(0, END)
            # print(urllist)
            for item in self.urllist:
                if (keywd.lower() in item.lower()) or (keywd.lower() in pypinyin.slug(item.lower(), separator='') or
                    (keywd.lower() in pypinyin.slug(item.lower(),style=Style.FIRST_LETTER,separator=''))):
                    self.listbox.insert(END, item)  # 載入搜尋結果
        else:
            self.listbox.delete(0, END)
            for item in self.urllist:
                self.listbox.insert(END, item)  # 空字元時,載入所有列表
  • 方向鍵快捷鍵:輸入框中按 Down鍵,進入條目區,條目區按下Left鍵返回搜尋框;

優化:

  • 開啟時游標定位到搜尋框
  • 開啟新增子視窗時,游標定位到輸入框,並使根視窗失效(不可點選)

PS:本文首發於 [Python中文社群] 公眾號,現開通了個人公眾號,故重發於此。 歡迎關注。 在這裡插入圖片描述