基于Python实现网站网页管理小工具

Written by

in

文章目录
  • 这个程序是一个网站/网页管理工具,主要用途是帮助用户整理、存储和快速访问常用网站信息,具体功能包括: 集中管理网站信息:可记录网站名称、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 os class WebsiteManager: def __init__(self, root): self.root = root self.root.title(“网站管理器”) self.root.geometry(“900×600″) # 增加宽度以容纳备注列 # 存储网站数据 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) # URL tk.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已存在”) return self.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(“警告”, “请先选择一个网站进行编辑”) return name = 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不能为空”) return item = 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”] = name website[“url”] = url website[“notes”] = notes break self.refresh_list() self.save_data() messagebox.showinfo(“成功”, “网站信息已更新”) def delete_website(self): selected = self.website_list.selection() if not selected: messagebox.showwarning(“警告”, “请先选择一个网站”) return if 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”: “B站”, “url”: “https://www.bilibili.com”, “notes”: “视频分享平台,有很多学习资源”} ] if __name__ == “__main__”: root = tk.Tk() app = WebsiteManager(root) root.mainloop() 到此这篇关于基于Python实现网站网页管理小工具的文章就介绍到这了,更多相关Python网站网页管理内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: python Ajenti控制面板轻松地管理所有服务器网站 Python猜解网站数据库管理员密码的脚本 Python Django网页界面协同过滤推荐算法实现商品管理与推荐 基于Python开发Windows自动更新控制工具 python+PyQt5高效实现Windows文件快速检索工具 Python+PyQt5实现PDF转图片工具的深度解析 基于Python开发一个交互式文件分类整理工具 Python+PyQt5开发一个全屏水印批量添加工具
  • 目录
    • 前言
    • 运行界面
    • 完整源码

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

    • 集中管理网站信息:可记录网站名称、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 os
    
    class WebsiteManager:
        def __init__(self, root):
            self.root = root
            self.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)
            
            # URL
            tk.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已存在")
                return
                
            self.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("警告", "请先选择一个网站进行编辑")
                return
                
            name = 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不能为空")
                return
                
            item = 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"] = name
                    website["url"] = url
                    website["notes"] = notes
                    break
                    
            self.refresh_list()
            self.save_data()
            messagebox.showinfo("成功", "网站信息已更新")
            
        def delete_website(self):
            selected = self.website_list.selection()
            if not selected:
                messagebox.showwarning("警告", "请先选择一个网站")
                return
                
            if 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": "B站", "url": "https://www.bilibili.com", "notes": "视频分享平台,有很多学习资源"}
                ]
    
    if __name__ == "__main__":
        root = tk.Tk()
        app = WebsiteManager(root)
        root.mainloop()
    

    到此这篇关于基于Python实现网站网页管理小工具的文章就介绍到这了,更多相关Python网站网页管理内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • python Ajenti控制面板轻松地管理所有服务器网站
    • Python猜解网站数据库管理员密码的脚本
    • Python Django网页界面协同过滤推荐算法实现商品管理与推荐
    • 基于Python开发Windows自动更新控制工具
    • python+PyQt5高效实现Windows文件快速检索工具
    • Python+PyQt5实现PDF转图片工具的深度解析
    • 基于Python开发一个交互式文件分类整理工具
    • Python+PyQt5开发一个全屏水印批量添加工具

    站内搜索