最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python實現(xiàn)網(wǎng)站網(wǎng)頁管理小工具

 更新時間:2025年09月30日 08:29:08   作者:學習&實踐愛好者  
這篇文章主要為大家詳細介紹了如何基于Python實現(xiàn)一個網(wǎng)站網(wǎng)頁管理小工具,主要用途是幫助用戶整理,存儲和快速訪問常用網(wǎng)站信息,感興趣的小伙伴可以了解下

前言

這個程序是一個網(wǎng)站/網(wǎng)頁管理工具,主要用途是幫助用戶整理、存儲和快速訪問常用網(wǎng)站信息,具體功能包括:

  • 集中管理網(wǎng)站信息:可記錄網(wǎng)站名稱、URL 地址和備注(如網(wǎng)站用途、賬號信息等),避免零散記憶或查找的麻煩。
  • 便捷操作:支持添加、編輯、刪除網(wǎng)站信息,選中網(wǎng)站后可直接在瀏覽器中打開。
  • 數(shù)據(jù)本地保存:所有信息存儲在本地 JSON 文件中,無需聯(lián)網(wǎng),保護隱私且數(shù)據(jù)不會丟失(除非手動刪除文件)。

適合需要管理多個常用網(wǎng)站(如學習平臺、工作工具、常用服務等)的用戶,相當于一個個性化的 “網(wǎng)站收藏夾”,比瀏覽器自帶收藏夾更靈活(可添加自定義備注)。

特別說明:第一次運行時,由于websites.json不存在,會自動加載預設的默認網(wǎng)站數(shù)據(jù)。當新增、編輯、刪除網(wǎng)站,會于當前目錄下建立本地文件:websites.json。之后就會加載使用websites.json的數(shù)據(jù)。

本程序需要的模塊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("網(wǎng)站管理器")
        self.root.geometry("900x600")  # 增加寬度以容納備注列
        
        # 存儲網(wǎng)站數(shù)據(jù)
        self.websites = []
        
        # 加載保存的數(shù)據(jù)
        self.load_data()
        
        # 創(chuàng)建界面
        self.create_widgets()
        
    def create_widgets(self):
        # 頂部標題
        title_label = tk.Label(self.root, text="網(wǎng)站 管理器", 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)
        
        # 輸入?yún)^(qū)域框架
        input_frame = tk.Frame(self.root)
        input_frame.pack(fill="x", padx=20, pady=10)
        
        # 網(wǎng)站名稱
        tk.Label(input_frame, text="網(wǎng)站名稱:").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)
        
        # 網(wǎng)站列表框架
        list_frame = tk.Frame(self.root)
        list_frame.pack(fill="both", expand=True, padx=20, pady=10)
        
        # 創(chuàng)建Treeview來顯示網(wǎng)站列表,增加備注列
        columns = ("名稱", "URL", "備注")  # 增加備注列
        self.website_list = ttk.Treeview(list_frame, columns=columns, show="headings", height=10)
        
        # 設置列標題
        self.website_list.heading("名稱", text="網(wǎng)址名稱")
        self.website_list.heading("URL", text="URL")
        self.website_list.heading("備注", text="備注")  # 增加備注列標題
        
        # 設置列寬,調(diào)整寬度總和超過列表框?qū)挾纫约せ钏綕L動
        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")
        
        # 配置網(wǎng)格權重
        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)
        
        # 左側(cè)按鈕
        tk.Button(button_frame, text="打開選定網(wǎng)站", 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)
        
        # 右側(cè)按鈕
        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)
        
        # 初始化網(wǎng)站列表
        self.refresh_list()
        
        # 初始狀態(tài)設置為不可編輯
        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")
            # 調(diào)整查詢條件,包含備注字段
            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("警告", "請先選擇一個網(wǎng)站")
            
    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("警告", "網(wǎng)站名稱和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("成功", "網(wǎng)站已添加")
        
    def edit_website(self):
        selected = self.website_list.selection()
        if not selected:
            messagebox.showwarning("警告", "請先選擇一個網(wǎng)站進行編輯")
            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("警告", "網(wǎng)站名稱和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
            
        # 更新網(wǎng)站信息
        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("成功", "網(wǎng)站信息已更新")
        
    def delete_website(self):
        selected = self.website_list.selection()
        if not selected:
            messagebox.showwarning("警告", "請先選擇一個網(wǎng)站")
            return
            
        if messagebox.askyesno("確認", "確定要刪除選定的網(wǎng)站嗎?"):
            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("成功", "網(wǎng)站已刪除")
            
    def refresh_list(self):
        # 清空列表
        for item in self.website_list.get_children():
            self.website_list.delete(item)
            
        # 添加網(wǎng)站到列表,包含備注信息
        for website in self.websites:
            self.website_list.insert("", "end", values=(
                website["name"], 
                website["url"], 
                website.get("notes", "")  # 增加備注顯示
            ))
            
    def show_help(self):
        help_text = """
網(wǎng)站管理器使用說明:

1. 勾選"允許編輯"復選框后,可以編輯網(wǎng)站名稱、URL和備注字段
2. 在右側(cè)列表中選擇一個網(wǎng)站,其信息將顯示在左側(cè)
3. 點擊"打開選定網(wǎng)站"將在瀏覽器中打開選中的網(wǎng)站
4. 點擊"清空"將清除所有輸入字段
5. 點擊"添加"將新網(wǎng)站添加到列表中(URL不能重復)
6. 點擊"編輯"將修改選中的網(wǎng)站信息
7. 點擊"刪除"將從列表中移除選中的網(wǎng)站
注意:第一次運行時,由于websites.json不存在,會自動加載預設的默認網(wǎng)站數(shù)據(jù)。當新增、編輯、刪除網(wǎng)站,會于當前目錄下建立本地文件:websites.json。之后就會加載使用websites.json的數(shù)據(jù)。
        """
        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):
        # 如果文件存在,加載數(shù)據(jù)
        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:
            # 否則使用默認數(shù)據(jù)
            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實現(xiàn)網(wǎng)站網(wǎng)頁管理小工具的文章就介紹到這了,更多相關Python網(wǎng)站網(wǎng)頁管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python 使用type來定義類的實現(xiàn)

    Python 使用type來定義類的實現(xiàn)

    今天小編就為大家分享一篇Python 使用type來定義類的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python requests post多層字典的方法

    python requests post多層字典的方法

    今天小編就為大家分享一篇python requests post多層字典的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python生成密碼字典詳解

    python生成密碼字典詳解

    大家好,本篇文章主要講的是python生成密碼字典詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 詳解Python中第三方庫Faker

    詳解Python中第三方庫Faker

    這篇文章主要介紹了Python中第三方庫-Faker的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Django 5種類型Session使用方法解析

    Django 5種類型Session使用方法解析

    這篇文章主要介紹了Django 5種類型Session使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 關于Python中的空值問題及解決

    關于Python中的空值問題及解決

    這篇文章主要介紹了關于Python中的空值問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Python測試Kafka集群(pykafka)實例

    Python測試Kafka集群(pykafka)實例

    今天小編就為大家分享一篇Python測試Kafka集群(pykafka)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python操作Git命令的詳細指南

    Python操作Git命令的詳細指南

    當談及版本控制系統(tǒng)時,Git是最為廣泛使用的一種,而Python作為一門多用途的編程語言,在處理Git倉庫時也展現(xiàn)了其強大的能力,通過Python,我們可以輕松地與Git倉庫進行交互,執(zhí)行各種操作,在本文中,我們將探討如何使用Python操作Git,需要的朋友可以參考下
    2025-06-06
  • 詳解numpy矩陣的創(chuàng)建與數(shù)據(jù)類型

    詳解numpy矩陣的創(chuàng)建與數(shù)據(jù)類型

    這篇文章主要介紹了詳解numpy矩陣的創(chuàng)建與數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • Python matplotlib圖例放在外側(cè)保存時顯示不完整問題解決

    Python matplotlib圖例放在外側(cè)保存時顯示不完整問題解決

    這篇文章主要介紹了Python matplotlib圖例放在外側(cè)保存時顯示不完整問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07

最新評論

武冈市| 玉龙| 凌海市| 武宣县| 玛纳斯县| 蕲春县| 武隆县| 高台县| 镇康县| 贵溪市| 定日县| 涟源市| 同仁县| 广灵县| 桐乡市| 双鸭山市| 循化| 普宁市| 独山县| 象山县| 兴化市| 礼泉县| 泾源县| 宝丰县| 卢氏县| 手机| 宁阳县| 禹州市| 潮安县| 金山区| 涪陵区| 兖州市| 德令哈市| 延庆县| 虞城县| 达拉特旗| 休宁县| 宜兰县| 田林县| 襄樊市| 邓州市|