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中文社区] 公众号,现开通了个人公众号,故重发于此。
欢迎关注。
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值