当前位置: 首页 > news >正文

Python实现网址管理小工具

Python实现网址管理小工具

这个程序是一个网址管理工具,主要用途是帮助用户整理、存储和快速访问常用网站信息,具体功能包括:

  • 集中管理网站信息:可记录网站名称、URL 地址和备注(如网站用途、账号信息等),避免零散记忆或查找的麻烦。

  • 便捷操作:支持添加、编辑、删除网站信息,选中网站后可直接在浏览器中打开。

  • 数据本地保存:所有信息存储在本地 JSON 文件中,无需联网,保护隐私且数据不会丢失(除非手动删除文件)。

适合需要管理多个常用网站(如学习平台、工作工具、常用服务等)的用户,相当于一个个性化的 “网站收藏夹”,比浏览器自带收藏夹更灵活(可添加自定义备注)。

特别说明:第一次运行时,由于websites.json不存在,会自动加载预设的默认网站数据。当新增、编辑、删除网站,会于当前目录下建立本地文件:websites.json。之后就会加载使用websites.json的数据。

本程序需要的模块tkinter、webbrowser、json、os是 Python 默认包含的基础库,安装 Python 时已自动附带,无需额外安装。

运行界面如下:

源码如下:

import tkinter as tk
from tkinter import ttk, messagebox   #, scrolledtext
import webbrowser
import json
import osclass WebsiteManager:def __init__(self, root):self.root = rootself.root.title("网址管理器")self.root.geometry("900x600")  # 增加宽度以容纳备注列# 存储网站数据self.websites = []# 加载保存的数据self.load_data()# 创建界面self.create_widgets()def create_widgets(self):# 顶部标题title_label = tk.Label(self.root, text="网址管理器", font=("Arial", 16, "bold"))title_label.pack(pady=10)# 允许编辑复选框self.edit_var = tk.BooleanVar()self.edit_check = tk.Checkbutton(self.root, text="允许编辑", variable=self.edit_var, command=self.toggle_editing)self.edit_check.pack(anchor="w", padx=20)# 输入区域框架input_frame = tk.Frame(self.root)input_frame.pack(fill="x", padx=20, pady=10)# 网站名称tk.Label(input_frame, text="网站名称:").grid(row=0, column=0, sticky="w", pady=5)self.name_entry = tk.Entry(input_frame, width=42)self.name_entry.grid(row=0, column=1, sticky="w", pady=5, padx=5)# URLtk.Label(input_frame, text="URL:").grid(row=1, column=0, sticky="w", pady=5)self.url_entry = tk.Entry(input_frame, width=84)self.url_entry.grid(row=1, column=1, sticky="w", pady=5, padx=5)# 备注tk.Label(input_frame, text="备注").grid(row=2, column=0, sticky="nw", pady=5)# self.notes_text = scrolledtext.ScrolledText(input_frame, width=30, height=4)self.notes_text = tk.Entry(input_frame, width=84)self.notes_text.grid(row=2, column=1, sticky="w", pady=5, padx=5)# 网站列表框架list_frame = tk.Frame(self.root)list_frame.pack(fill="both", expand=True, padx=20, pady=10)# 创建Treeview来显示网站列表,增加备注列columns = ("名称", "URL", "备注")  # 增加备注列self.website_list = ttk.Treeview(list_frame, columns=columns, show="headings", height=10)# 设置列标题self.website_list.heading("名称", text="网址名称")self.website_list.heading("URL", text="URL")self.website_list.heading("备注", text="备注")  # 增加备注列标题# 设置列宽,调整宽度总和超过列表框宽度以激活水平滚动self.website_list.column("名称", width=150, minwidth=150)self.website_list.column("URL", width=450, minwidth=450)self.website_list.column("备注", width=400, minwidth=400)  # 增加备注列# 添加滚动条v_scrollbar = ttk.Scrollbar(list_frame, orient="vertical", command=self.website_list.yview)h_scrollbar = ttk.Scrollbar(list_frame, orient="horizontal", command=self.website_list.xview)self.website_list.configure(yscrollcommand=v_scrollbar.set, xscrollcommand=h_scrollbar.set)# 布局Treeview和滚动条self.website_list.grid(row=0, column=0, sticky="nsew")v_scrollbar.grid(row=0, column=1, sticky="ns")h_scrollbar.grid(row=1, column=0, sticky="ew")# 配置网格权重list_frame.grid_rowconfigure(0, weight=1)list_frame.grid_columnconfigure(0, weight=1)# 绑定选择事件self.website_list.bind("<<TreeviewSelect>>", self.on_select)# 按钮框架button_frame = tk.Frame(self.root)button_frame.pack(fill="x", padx=20, pady=10)# 左侧按钮tk.Button(button_frame, text="打开选定网站", command=self.open_website).pack(side="left", padx=5)tk.Button(button_frame, text="清空", command=self.clear_fields).pack(side="left", padx=5)tk.Button(button_frame, text="帮助", command=self.show_help).pack(side="left", padx=5)# 右侧按钮tk.Button(button_frame, text="添加", command=self.add_website).pack(side="right", padx=5)tk.Button(button_frame, text="编辑", command=self.edit_website).pack(side="right", padx=5)tk.Button(button_frame, text="删除", command=self.delete_website).pack(side="right", padx=5)# 初始化网站列表self.refresh_list()# 初始状态设置为不可编辑self.toggle_editing()def toggle_editing(self):state = "normal" if self.edit_var.get() else "disabled"self.name_entry.config(state=state)self.url_entry.config(state=state)self.notes_text.config(state=state)def on_select(self, event):selected = self.website_list.selection()if selected:item = selected[0]values = self.website_list.item(item, "values")# 调整查询条件,包含备注字段website = next((w for w in self.websites if w["name"] == values[0] and w["url"] == values[1]), None)if website:self.name_entry.config(state="normal")self.url_entry.config(state="normal")self.notes_text.config(state="normal")self.name_entry.delete(0, tk.END)self.name_entry.insert(0, website["name"])self.url_entry.delete(0, tk.END)self.url_entry.insert(0, website["url"])#self.notes_text.delete(1.0, tk.END)#self.notes_text.insert(1.0, website.get("notes", ""))self.notes_text.delete(0, tk.END)self.notes_text.insert(0, website["notes"])self.toggle_editing()def clear_fields(self):self.name_entry.delete(0, tk.END)self.url_entry.delete(0, tk.END)#self.notes_text.delete(1.0, tk.END)self.notes_text.delete(0, tk.END)def open_website(self):selected = self.website_list.selection()if selected:item = selected[0]url = self.website_list.item(item, "values")[1]webbrowser.open(url)else:messagebox.showwarning("警告", "请先选择一个网站")def add_website(self):name = self.name_entry.get().strip()url = self.url_entry.get().strip()#notes = self.notes_text.get(1.0, tk.END).strip()notes = self.notes_text.get().strip()if not name or not url:messagebox.showwarning("警告", "网站名称和URL不能为空")return# 检查URL是否已存在if any(w["url"] == url for w in self.websites):messagebox.showwarning("警告", "该URL已存在")returnself.websites.append({"name": name,"url": url,"notes": notes})self.refresh_list()self.clear_fields()self.save_data()messagebox.showinfo("成功", "网站已添加")def edit_website(self):selected = self.website_list.selection()if not selected:messagebox.showwarning("警告", "请先选择一个网站进行编辑")returnname = self.name_entry.get().strip()url = self.url_entry.get().strip()notes = self.notes_text.get(1.0, tk.END).strip()if not name or not url:messagebox.showwarning("警告", "网站名称和URL不能为空")returnitem = selected[0]old_values = self.website_list.item(item, "values")old_url = old_values[1]# 检查URL是否已存在(排除自己)if any(w["url"] == url and w["url"] != old_url for w in self.websites):messagebox.showwarning("警告", "该URL已存在")return# 更新网站信息for website in self.websites:if website["url"] == old_url:website["name"] = namewebsite["url"] = urlwebsite["notes"] = notesbreakself.refresh_list()self.save_data()messagebox.showinfo("成功", "网站信息已更新")def delete_website(self):selected = self.website_list.selection()if not selected:messagebox.showwarning("警告", "请先选择一个网站")returnif messagebox.askyesno("确认", "确定要删除选定的网站吗?"):item = selected[0]url = self.website_list.item(item, "values")[1]# 从列表中删除self.websites = [w for w in self.websites if w["url"] != url]self.refresh_list()self.clear_fields()self.save_data()messagebox.showinfo("成功", "网站已删除")def refresh_list(self):# 清空列表for item in self.website_list.get_children():self.website_list.delete(item)# 添加网站到列表,包含备注信息for website in self.websites:self.website_list.insert("", "end", values=(website["name"], website["url"], website.get("notes", "")  # 增加备注显示))def show_help(self):help_text = """
网站管理器使用说明:1. 勾选"允许编辑"复选框后,可以编辑网站名称、URL和备注字段
2. 在右侧列表中选择一个网站,其信息将显示在左侧
3. 点击"打开选定网站"将在浏览器中打开选中的网站
4. 点击"清空"将清除所有输入字段
5. 点击"添加"将新网站添加到列表中(URL不能重复)
6. 点击"编辑"将修改选中的网站信息
7. 点击"删除"将从列表中移除选中的网站
注意:第一次运行时,由于websites.json不存在,会自动加载预设的默认网站数据。当新增、编辑、删除网站,会于当前目录下建立本地文件:websites.json。之后就会加载使用websites.json的数据。"""messagebox.showinfo("帮助", help_text)def save_data(self):with open("websites.json", "w", encoding="utf-8") as f:json.dump(self.websites, f, ensure_ascii=False, indent=2)def load_data(self):# 如果文件存在,加载数据if os.path.exists("websites.json"):try:with open("websites.json", "r", encoding="utf-8") as f:self.websites = json.load(f)except:# 若文件损坏或格式错误,初始化空列表self.websites = []else:# 否则使用默认数据self.websites = [{"name": "百度AI", "url": "https://chat.baidu.com", "notes": "百度智能对话平台"},{"name": "deepseekAI", "url": "https://chat.deepseek.com", "notes": "深度求索deepseekAI网页版入口 "},{"name": "豆包AI", "url": "https://www.doubao.com/chat", "notes": "字节跳动旗下AI 助手网页版入口"},{"name": "B站", "url": "https://www.bilibili.com", "notes": "视频分享平台,有很多学习资源"}]if __name__ == "__main__":root = tk.Tk()app = WebsiteManager(root)root.mainloop()

http://www.dtcms.com/a/424769.html

相关文章:

  • 潮汕17网站一起做网店官网北京快三平台
  • 专门做杂志的网站有哪些做网站单网页
  • wordpress 文章转dz企业站seo点击软件
  • 一流的聊城做网站费用百度高级搜索引擎入口
  • 李想公开课_如何做一个专业的CEO笔记
  • 房地产型网站建设报价pageadmin系统
  • group scheduling
  • 工业园区门户网站建设方案网站建设极地网
  • 网站建设网站系统选择做宣传册参考的网站
  • 自治区建设厅网站哪些网站做的比较好的
  • jsp网站开发技术难点建设永久网站
  • 做教育的网站有哪些中国怎么进fiverr网站做任务
  • 门户网站制作企业wordpress怎么做表格
  • 从索引失效到毫秒级响应——SQL 优化实战案例:从慢查询到高性能的完整指南之电商大促篇
  • 内联函数(inline)详解
  • 记力扣2271.毯子覆盖的最多白色砖块数 练习理解
  • MATH-500:大模型数学推理能力评估基准
  • 微商城网站建设方案网站宽度
  • 网站显示乱码怎么办啊微信小程序如何推广
  • iis 做网站市场调研报告怎么做
  • 免费搭建商业网站广州市行政区划图
  • 如何做宣传推广的网站链接网站建设标准 方案书
  • 温州网站建设团队利用百度网盘自动播放做视频网站
  • 如何做新网站保留域名展馆设计论文
  • 【机器学习】朴素贝叶斯法
  • 「React实战面试题」:React.memo为什么失效了?
  • 尼罗发表小说做的的网站是哪个抖音小店代运营
  • 手机网站用什么语言开发小影wordpress
  • 天津项目网站建设京东网站建设有哪些优点
  • 韩国在中国做美食的视频网站有哪些cvm可以做网站服务器吗