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

基于Python開發(fā)一個(gè)桌面便簽工具

 更新時(shí)間:2025年08月26日 10:19:16   作者:小莊-Python辦公  
這篇文章主要為大家詳細(xì)介紹了如何基于Python開發(fā)一個(gè)桌面便簽工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

前言

一個(gè)功能豐富的桌面置頂便簽小工具,使用Python和tkinter開發(fā)。

功能特點(diǎn)

  • 窗口置頂: 便簽窗口始終保持在桌面最前端
  • 自動保存: 程序關(guān)閉時(shí)自動保存內(nèi)容和配置
  • 字體自定義: 支持修改字體類型和大小
  • 顏色主題: 可自定義背景色和文字顏色
  • 文件操作: 支持新建、打開、保存文本文件
  • 實(shí)時(shí)時(shí)間: 顯示當(dāng)前日期和時(shí)間
  • 快捷鍵支持: 常用操作的鍵盤快捷鍵

使用方法

方法:直接運(yùn)行Python文件

python sticky_notes.py

快捷鍵

Ctrl + S: 保存文件

Ctrl + N: 新建便簽

Ctrl + O: 打開文件

菜單功能

文件菜單

  • 新建: 清空當(dāng)前內(nèi)容,創(chuàng)建新便簽
  • 打開: 打開已保存的文本文件
  • 保存: 將當(dāng)前內(nèi)容保存為文件
  • 退出: 關(guān)閉程序

設(shè)置菜單

  • 字體設(shè)置: 修改字體類型和大小
  • 顏色設(shè)置: 自定義背景色和文字顏色
  • 置頂設(shè)置: 開啟/關(guān)閉窗口置頂功能

幫助菜單

關(guān)于: 查看程序信息和使用說明

工具欄按鈕

新建: 創(chuàng)建新便簽

保存: 保存當(dāng)前內(nèi)容

清空: 清空所有文本內(nèi)容

自動保存功能

程序會自動保存以下內(nèi)容:

  • 便簽文本內(nèi)容(保存在 sticky_notes_content.txt)
  • 程序配置設(shè)置(保存在 sticky_notes_config.json)
  • 窗口位置和大小
  • 字體和顏色設(shè)置

系統(tǒng)要求

Python 3.6 或更高版本

tkinter 庫(Python標(biāo)準(zhǔn)庫,通常已包含)

文件說明

  • sticky_notes.py: 主程序文件
  • run.bat: Windows啟動腳本
  • sticky_notes_config.json: 配置文件(自動生成)
  • sticky_notes_content.txt: 內(nèi)容文件(自動生成)

注意事項(xiàng)

  • 首次運(yùn)行時(shí)會創(chuàng)建配置文件和內(nèi)容文件
  • 程序關(guān)閉時(shí)會自動保存當(dāng)前狀態(tài)
  • 如需重置所有設(shè)置,可刪除配置文件重新啟動程序
  • 支持中文顯示和輸入

故障排除

如果程序無法啟動,請檢查:

  • 是否已正確安裝Python
  • Python是否已添加到系統(tǒng)PATH環(huán)境變量
  • 是否有足夠的權(quán)限在當(dāng)前目錄創(chuàng)建文件

完整代碼

import tkinter as tk
from tkinter import messagebox, filedialog, colorchooser, font
import json
import os
from datetime import datetime

class StickyNoteEnhanced:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("桌面便簽工具 Enhanced")
        self.root.geometry("450x350")
        self.root.configure(bg='#FFFACD')
        
        # 設(shè)置窗口置頂
        self.root.attributes('-topmost', True)
        
        # 配置文件路徑
        self.config_file = "sticky_notes_config.json"
        self.notes_dir = "saved_notes"
        
        # 創(chuàng)建保存目錄
        if not os.path.exists(self.notes_dir):
            os.makedirs(self.notes_dir)
        
        # 默認(rèn)配置
        self.config = {
            'font_size': 12,
            'font_family': 'Microsoft YaHei',
            'bg_color': '#FFFACD',
            'text_color': '#000000',
            'window_size': '450x350',
            'window_position': '+100+100',
            'always_on_top': True,
            'transparency': 1.0,
            'auto_save': True
        }
        
        # 加載配置
        self.load_config()
        
        # 創(chuàng)建界面
        self.create_widgets()
        
        # 加載保存的內(nèi)容
        self.load_content()
        
        # 綁定關(guān)閉事件
        self.root.protocol("WM_DELETE_WINDOW", self.on_closing)
        
        # 自動保存定時(shí)器
        if self.config['auto_save']:
            self.auto_save_timer()
    
    def create_widgets(self):
        """創(chuàng)建界面組件"""
        # 創(chuàng)建菜單欄
        menubar = tk.Menu(self.root)
        self.root.config(menu=menubar)
        
        # 文件菜單
        file_menu = tk.Menu(menubar, tearoff=0)
        menubar.add_cascade(label="文件", menu=file_menu)
        file_menu.add_command(label="新建", command=self.new_note)
        file_menu.add_command(label="打開", command=self.open_file)
        file_menu.add_command(label="保存", command=self.save_file)
        file_menu.add_command(label="另存為", command=self.save_as_file)
        file_menu.add_separator()
        file_menu.add_command(label="導(dǎo)入", command=self.import_note)
        file_menu.add_command(label="導(dǎo)出", command=self.export_note)
        file_menu.add_separator()
        file_menu.add_command(label="退出", command=self.on_closing)
        
        # 編輯菜單
        edit_menu = tk.Menu(menubar, tearoff=0)
        menubar.add_cascade(label="編輯", menu=edit_menu)
        edit_menu.add_command(label="撤銷", command=self.undo)
        edit_menu.add_command(label="重做", command=self.redo)
        edit_menu.add_separator()
        edit_menu.add_command(label="剪切", command=self.cut_text)
        edit_menu.add_command(label="復(fù)制", command=self.copy_text)
        edit_menu.add_command(label="粘貼", command=self.paste_text)
        edit_menu.add_separator()
        edit_menu.add_command(label="全選", command=self.select_all)
        edit_menu.add_command(label="查找", command=self.find_text)
        
        # 設(shè)置菜單
        settings_menu = tk.Menu(menubar, tearoff=0)
        menubar.add_cascade(label="設(shè)置", menu=settings_menu)
        settings_menu.add_command(label="字體設(shè)置", command=self.font_settings)
        settings_menu.add_command(label="顏色設(shè)置", command=self.color_settings)
        settings_menu.add_command(label="透明度設(shè)置", command=self.transparency_settings)
        settings_menu.add_command(label="置頂設(shè)置", command=self.toggle_topmost)
        settings_menu.add_command(label="自動保存", command=self.toggle_auto_save)
        
        # 幫助菜單
        help_menu = tk.Menu(menubar, tearoff=0)
        menubar.add_cascade(label="幫助", menu=help_menu)
        help_menu.add_command(label="快捷鍵", command=self.show_shortcuts)
        help_menu.add_command(label="關(guān)于", command=self.show_about)
        
        # 創(chuàng)建工具欄
        toolbar = tk.Frame(self.root, bg=self.config['bg_color'])
        toolbar.pack(fill=tk.X, padx=5, pady=2)
        
        # 工具欄按鈕
        tk.Button(toolbar, text="新建", command=self.new_note, width=6).pack(side=tk.LEFT, padx=2)
        tk.Button(toolbar, text="打開", command=self.open_file, width=6).pack(side=tk.LEFT, padx=2)
        tk.Button(toolbar, text="保存", command=self.save_file, width=6).pack(side=tk.LEFT, padx=2)
        tk.Button(toolbar, text="清空", command=self.clear_text, width=6).pack(side=tk.LEFT, padx=2)
        
        # 分隔符
        tk.Frame(toolbar, width=2, bg='gray').pack(side=tk.LEFT, fill=tk.Y, padx=5)
        
        # 字體大小調(diào)節(jié)
        tk.Label(toolbar, text="字號:", bg=self.config['bg_color']).pack(side=tk.LEFT, padx=2)
        self.font_size_var = tk.StringVar(value=str(self.config['font_size']))
        font_size_combo = tk.Spinbox(toolbar, from_=8, to=72, width=5, textvariable=self.font_size_var, command=self.change_font_size)
        font_size_combo.pack(side=tk.LEFT, padx=2)
        
        # 時(shí)間標(biāo)簽
        self.time_label = tk.Label(toolbar, text="", bg=self.config['bg_color'], fg=self.config['text_color'])
        self.time_label.pack(side=tk.RIGHT, padx=5)
        self.update_time()
        
        # 創(chuàng)建文本編輯區(qū)域
        text_frame = tk.Frame(self.root)
        text_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
        
        # 文本框
        self.text_area = tk.Text(
            text_frame,
            font=(self.config['font_family'], self.config['font_size']),
            bg=self.config['bg_color'],
            fg=self.config['text_color'],
            wrap=tk.WORD,
            undo=True,
            maxundo=50
        )
        
        # 滾動條
        scrollbar = tk.Scrollbar(text_frame)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        
        self.text_area.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        self.text_area.config(yscrollcommand=scrollbar.set)
        scrollbar.config(command=self.text_area.yview)
        
        # 狀態(tài)欄
        status_frame = tk.Frame(self.root)
        status_frame.pack(side=tk.BOTTOM, fill=tk.X)
        
        self.status_bar = tk.Label(
            status_frame,
            text="就緒",
            relief=tk.SUNKEN,
            anchor=tk.W,
            bg=self.config['bg_color'],
            fg=self.config['text_color']
        )
        self.status_bar.pack(side=tk.LEFT, fill=tk.X, expand=True)
        
        # 字符統(tǒng)計(jì)標(biāo)簽
        self.char_count_label = tk.Label(
            status_frame,
            text="字符: 0",
            relief=tk.SUNKEN,
            bg=self.config['bg_color'],
            fg=self.config['text_color']
        )
        self.char_count_label.pack(side=tk.RIGHT, padx=5)
        
        # 綁定事件
        self.bind_events()
        
    def bind_events(self):
        """綁定快捷鍵和事件"""
        # 快捷鍵
        self.root.bind('<Control-s>', lambda e: self.save_file())
        self.root.bind('<Control-n>', lambda e: self.new_note())
        self.root.bind('<Control-o>', lambda e: self.open_file())
        self.root.bind('<Control-z>', lambda e: self.undo())
        self.root.bind('<Control-y>', lambda e: self.redo())
        self.root.bind('<Control-a>', lambda e: self.select_all())
        self.root.bind('<Control-f>', lambda e: self.find_text())
        self.root.bind('<Control-plus>', lambda e: self.increase_font())
        self.root.bind('<Control-minus>', lambda e: self.decrease_font())
        
        # 文本變化事件
        self.text_area.bind('<KeyRelease>', self.on_text_change)
        self.text_area.bind('<Button-1>', self.on_text_change)
        
    def update_time(self):
        """更新時(shí)間顯示"""
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        self.time_label.config(text=current_time)
        self.root.after(1000, self.update_time)
        
    def on_text_change(self, event=None):
        """文本變化時(shí)的處理"""
        content = self.text_area.get(1.0, tk.END)
        char_count = len(content) - 1  # 減去末尾的換行符
        self.char_count_label.config(text=f"字符: {char_count}")
        
    def change_font_size(self):
        """改變字體大小"""
        try:
            new_size = int(self.font_size_var.get())
            self.config['font_size'] = new_size
            self.text_area.config(font=(self.config['font_family'], new_size))
            self.save_config()
        except ValueError:
            pass
            
    def increase_font(self):
        """增大字體"""
        current_size = self.config['font_size']
        if current_size < 72:
            self.config['font_size'] = current_size + 1
            self.font_size_var.set(str(self.config['font_size']))
            self.text_area.config(font=(self.config['font_family'], self.config['font_size']))
            self.save_config()
            
    def decrease_font(self):
        """減小字體"""
        current_size = self.config['font_size']
        if current_size > 8:
            self.config['font_size'] = current_size - 1
            self.font_size_var.set(str(self.config['font_size']))
            self.text_area.config(font=(self.config['font_family'], self.config['font_size']))
            self.save_config()
            
    def new_note(self):
        """新建便簽"""
        if self.text_area.get(1.0, tk.END).strip():
            if messagebox.askyesno("新建", "當(dāng)前內(nèi)容未保存,是否繼續(xù)?"):
                self.text_area.delete(1.0, tk.END)
                self.status_bar.config(text="新建便簽")
        else:
            self.text_area.delete(1.0, tk.END)
            self.status_bar.config(text="新建便簽")
            
    def save_file(self):
        """保存文件"""
        try:
            content = self.text_area.get(1.0, tk.END)
            if not hasattr(self, 'current_file') or not self.current_file:
                self.save_as_file()
                return
                
            with open(self.current_file, 'w', encoding='utf-8') as f:
                f.write(content)
            self.status_bar.config(text=f"已保存: {os.path.basename(self.current_file)}")
        except Exception as e:
            messagebox.showerror("錯誤", f"保存失敗: {str(e)}")
            
    def save_as_file(self):
        """另存為文件"""
        try:
            content = self.text_area.get(1.0, tk.END)
            filename = filedialog.asksaveasfilename(
                defaultextension=".txt",
                filetypes=[("文本文件", "*.txt"), ("所有文件", "*.*")]
            )
            if filename:
                with open(filename, 'w', encoding='utf-8') as f:
                    f.write(content)
                self.current_file = filename
                self.status_bar.config(text=f"已保存: {os.path.basename(filename)}")
                messagebox.showinfo("保存", "文件保存成功!")
        except Exception as e:
            messagebox.showerror("錯誤", f"保存失敗: {str(e)}")
            
    def open_file(self):
        """打開文件"""
        try:
            filename = filedialog.askopenfilename(
                filetypes=[("文本文件", "*.txt"), ("所有文件", "*.*")]
            )
            if filename:
                with open(filename, 'r', encoding='utf-8') as f:
                    content = f.read()
                self.text_area.delete(1.0, tk.END)
                self.text_area.insert(1.0, content)
                self.current_file = filename
                self.status_bar.config(text=f"已打開: {os.path.basename(filename)}")
        except Exception as e:
            messagebox.showerror("錯誤", f"打開失敗: {str(e)}")
            
    def import_note(self):
        """導(dǎo)入便簽"""
        self.open_file()
        
    def export_note(self):
        """導(dǎo)出便簽"""
        self.save_as_file()
        
    def clear_text(self):
        """清空文本"""
        if messagebox.askyesno("清空", "確定要清空所有內(nèi)容嗎?"):
            self.text_area.delete(1.0, tk.END)
            self.status_bar.config(text="已清空內(nèi)容")
            
    def undo(self):
        """撤銷"""
        try:
            self.text_area.edit_undo()
        except tk.TclError:
            pass
            
    def redo(self):
        """重做"""
        try:
            self.text_area.edit_redo()
        except tk.TclError:
            pass
            
    def cut_text(self):
        """剪切"""
        try:
            self.text_area.event_generate("<<Cut>>")
        except:
            pass
            
    def copy_text(self):
        """復(fù)制"""
        try:
            self.text_area.event_generate("<<Copy>>")
        except:
            pass
            
    def paste_text(self):
        """粘貼"""
        try:
            self.text_area.event_generate("<<Paste>>")
        except:
            pass
            
    def select_all(self):
        """全選"""
        self.text_area.tag_add(tk.SEL, "1.0", tk.END)
        self.text_area.mark_set(tk.INSERT, "1.0")
        self.text_area.see(tk.INSERT)
        return 'break'
        
    def find_text(self):
        """查找文本"""
        find_window = tk.Toplevel(self.root)
        find_window.title("查找")
        find_window.geometry("300x100")
        find_window.attributes('-topmost', True)
        
        tk.Label(find_window, text="查找內(nèi)容:").pack(pady=5)
        search_var = tk.StringVar()
        search_entry = tk.Entry(find_window, textvariable=search_var, width=30)
        search_entry.pack(pady=5)
        search_entry.focus()
        
        def do_find():
            search_text = search_var.get()
            if search_text:
                start_pos = self.text_area.search(search_text, tk.INSERT, tk.END)
                if start_pos:
                    end_pos = f"{start_pos}+{len(search_text)}c"
                    self.text_area.tag_remove(tk.SEL, "1.0", tk.END)
                    self.text_area.tag_add(tk.SEL, start_pos, end_pos)
                    self.text_area.mark_set(tk.INSERT, end_pos)
                    self.text_area.see(start_pos)
                else:
                    messagebox.showinfo("查找", "未找到指定內(nèi)容")
                    
        tk.Button(find_window, text="查找", command=do_find).pack(pady=5)
        search_entry.bind('<Return>', lambda e: do_find())
        
    def font_settings(self):
        """字體設(shè)置"""
        font_window = tk.Toplevel(self.root)
        font_window.title("字體設(shè)置")
        font_window.geometry("350x250")
        font_window.attributes('-topmost', True)
        
        # 字體族
        tk.Label(font_window, text="字體:").pack(pady=5)
        font_var = tk.StringVar(value=self.config['font_family'])
        font_families = list(font.families())
        font_combo = tk.Listbox(font_window, height=6)
        for family in font_families:
            font_combo.insert(tk.END, family)
        font_combo.pack(pady=5, fill=tk.BOTH, expand=True)
        
        # 設(shè)置當(dāng)前選中的字體
        try:
            current_index = font_families.index(self.config['font_family'])
            font_combo.selection_set(current_index)
            font_combo.see(current_index)
        except ValueError:
            pass
        
        # 字體大小
        size_frame = tk.Frame(font_window)
        size_frame.pack(pady=5)
        tk.Label(size_frame, text="大小:").pack(side=tk.LEFT)
        size_var = tk.IntVar(value=self.config['font_size'])
        size_spin = tk.Spinbox(size_frame, from_=8, to=72, textvariable=size_var, width=10)
        size_spin.pack(side=tk.LEFT, padx=5)
        
        def apply_font():
            selection = font_combo.curselection()
            if selection:
                selected_font = font_families[selection[0]]
                self.config['font_family'] = selected_font
            self.config['font_size'] = size_var.get()
            self.text_area.config(font=(self.config['font_family'], self.config['font_size']))
            self.font_size_var.set(str(self.config['font_size']))
            self.save_config()
            font_window.destroy()
            
        button_frame = tk.Frame(font_window)
        button_frame.pack(pady=10)
        tk.Button(button_frame, text="應(yīng)用", command=apply_font).pack(side=tk.LEFT, padx=5)
        tk.Button(button_frame, text="取消", command=font_window.destroy).pack(side=tk.LEFT, padx=5)
        
    def color_settings(self):
        """顏色設(shè)置"""
        color_window = tk.Toplevel(self.root)
        color_window.title("顏色設(shè)置")
        color_window.geometry("250x200")
        color_window.attributes('-topmost', True)
        
        def choose_bg_color():
            color = colorchooser.askcolor(title="選擇背景顏色", initialcolor=self.config['bg_color'])
            if color[1]:
                self.config['bg_color'] = color[1]
                self.apply_colors()
                
        def choose_text_color():
            color = colorchooser.askcolor(title="選擇文字顏色", initialcolor=self.config['text_color'])
            if color[1]:
                self.config['text_color'] = color[1]
                self.apply_colors()
                
        tk.Button(color_window, text="背景顏色", command=choose_bg_color, width=15).pack(pady=10)
        tk.Button(color_window, text="文字顏色", command=choose_text_color, width=15).pack(pady=10)
        
        def reset_colors():
            self.config['bg_color'] = '#FFFACD'
            self.config['text_color'] = '#000000'
            self.apply_colors()
            
        tk.Button(color_window, text="恢復(fù)默認(rèn)", command=reset_colors, width=15).pack(pady=10)
        tk.Button(color_window, text="關(guān)閉", command=color_window.destroy, width=15).pack(pady=10)
        
    def transparency_settings(self):
        """透明度設(shè)置"""
        trans_window = tk.Toplevel(self.root)
        trans_window.title("透明度設(shè)置")
        trans_window.geometry("300x150")
        trans_window.attributes('-topmost', True)
        
        tk.Label(trans_window, text="透明度 (0.1-1.0):").pack(pady=10)
        
        trans_var = tk.DoubleVar(value=self.config['transparency'])
        trans_scale = tk.Scale(trans_window, from_=0.1, to=1.0, resolution=0.1, 
                              orient=tk.HORIZONTAL, variable=trans_var, length=200)
        trans_scale.pack(pady=10)
        
        def apply_transparency():
            self.config['transparency'] = trans_var.get()
            self.root.attributes('-alpha', self.config['transparency'])
            self.save_config()
            trans_window.destroy()
            
        def preview_transparency():
            self.root.attributes('-alpha', trans_var.get())
            
        trans_scale.config(command=lambda x: preview_transparency())
        
        button_frame = tk.Frame(trans_window)
        button_frame.pack(pady=10)
        tk.Button(button_frame, text="應(yīng)用", command=apply_transparency).pack(side=tk.LEFT, padx=5)
        tk.Button(button_frame, text="取消", command=trans_window.destroy).pack(side=tk.LEFT, padx=5)
        
    def apply_colors(self):
        """應(yīng)用顏色設(shè)置"""
        self.root.configure(bg=self.config['bg_color'])
        self.text_area.configure(bg=self.config['bg_color'], fg=self.config['text_color'])
        self.time_label.configure(bg=self.config['bg_color'], fg=self.config['text_color'])
        self.status_bar.configure(bg=self.config['bg_color'], fg=self.config['text_color'])
        self.char_count_label.configure(bg=self.config['bg_color'], fg=self.config['text_color'])
        self.save_config()
        
    def toggle_topmost(self):
        """切換置頂狀態(tài)"""
        self.config['always_on_top'] = not self.config['always_on_top']
        self.root.attributes('-topmost', self.config['always_on_top'])
        status = "已開啟" if self.config['always_on_top'] else "已關(guān)閉"
        self.status_bar.config(text=f"窗口置頂 {status}")
        self.save_config()
        
    def toggle_auto_save(self):
        """切換自動保存"""
        self.config['auto_save'] = not self.config['auto_save']
        status = "已開啟" if self.config['auto_save'] else "已關(guān)閉"
        self.status_bar.config(text=f"自動保存 {status}")
        self.save_config()
        
        if self.config['auto_save']:
            self.auto_save_timer()
            
    def auto_save_timer(self):
        """自動保存定時(shí)器"""
        if self.config['auto_save']:
            self.save_content()
            self.root.after(30000, self.auto_save_timer)  # 30秒自動保存
            
    def show_shortcuts(self):
        """顯示快捷鍵"""
        shortcuts_text = """
快捷鍵列表:

Ctrl+N: 新建便簽
Ctrl+O: 打開文件
Ctrl+S: 保存文件
Ctrl+Z: 撤銷
Ctrl+Y: 重做
Ctrl+A: 全選
Ctrl+F: 查找
Ctrl+Plus: 增大字體
Ctrl+Minus: 減小字體
        """
        messagebox.showinfo("快捷鍵", shortcuts_text)
        
    def show_about(self):
        """顯示關(guān)于信息"""
        about_text = """
桌面便簽工具 Enhanced v2.0

功能特點(diǎn):
? 窗口置頂顯示
? 自動保存配置和內(nèi)容
? 支持字體和顏色自定義
? 支持透明度調(diào)節(jié)
? 支持文件保存和打開
? 實(shí)時(shí)時(shí)間和字符統(tǒng)計(jì)
? 豐富的編輯功能
? 快捷鍵支持

作者:AI助手
版本:2.0
        """
        messagebox.showinfo("關(guān)于", about_text)
        
    def load_config(self):
        """加載配置"""
        try:
            if os.path.exists(self.config_file):
                with open(self.config_file, 'r', encoding='utf-8') as f:
                    saved_config = json.load(f)
                    self.config.update(saved_config)
        except Exception as e:
            print(f"加載配置失敗: {e}")
            
    def save_config(self):
        """保存配置"""
        try:
            # 保存當(dāng)前窗口位置和大小
            geometry = self.root.geometry()
            if '+' in geometry:
                self.config['window_size'] = geometry.split('+')[0]
                self.config['window_position'] = '+' + '+'.join(geometry.split('+')[1:])
            
            with open(self.config_file, 'w', encoding='utf-8') as f:
                json.dump(self.config, f, ensure_ascii=False, indent=2)
        except Exception as e:
            print(f"保存配置失敗: {e}")
            
    def load_content(self):
        """加載保存的內(nèi)容"""
        try:
            content_file = "sticky_notes_content.txt"
            if os.path.exists(content_file):
                with open(content_file, 'r', encoding='utf-8') as f:
                    content = f.read()
                    self.text_area.insert(1.0, content)
        except Exception as e:
            print(f"加載內(nèi)容失敗: {e}")
            
    def save_content(self):
        """保存當(dāng)前內(nèi)容"""
        try:
            content = self.text_area.get(1.0, tk.END)
            content_file = "sticky_notes_content.txt"
            with open(content_file, 'w', encoding='utf-8') as f:
                f.write(content)
        except Exception as e:
            print(f"保存內(nèi)容失敗: {e}")
            
    def on_closing(self):
        """關(guān)閉程序時(shí)的處理"""
        self.save_content()
        self.save_config()
        self.root.destroy()
        
    def run(self):
        """運(yùn)行程序"""
        # 應(yīng)用保存的窗口設(shè)置
        geometry = self.config['window_size'] + self.config['window_position']
        self.root.geometry(geometry)
        self.root.attributes('-topmost', self.config['always_on_top'])
        self.root.attributes('-alpha', self.config['transparency'])
        
        # 應(yīng)用顏色設(shè)置
        self.apply_colors()
        
        self.root.mainloop()

if __name__ == "__main__":
    app = StickyNoteEnhanced()
    app.run()

效果圖

到此這篇關(guān)于基于Python開發(fā)一個(gè)桌面便簽工具的文章就介紹到這了,更多相關(guān)Python便簽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python使用win32com在百度空間插入html元素示例

    python使用win32com在百度空間插入html元素示例

    這篇文章主要介紹了python使用win32com在百度空間插入html元素的示例,大家參考使用吧
    2014-02-02
  • python如何調(diào)用java的jar包

    python如何調(diào)用java的jar包

    這篇文章主要為大家詳細(xì)介紹了python如何調(diào)用java的jar包,文中的示例代碼簡潔易懂,具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2025-06-06
  • python 實(shí)現(xiàn)定時(shí)任務(wù)的四種方式

    python 實(shí)現(xiàn)定時(shí)任務(wù)的四種方式

    這篇文章主要介紹了python 實(shí)現(xiàn)定時(shí)任務(wù)的四種方式,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • python將ip地址轉(zhuǎn)換成整數(shù)的方法

    python將ip地址轉(zhuǎn)換成整數(shù)的方法

    這篇文章主要介紹了python將ip地址轉(zhuǎn)換成整數(shù)的方法,涉及Python針對IP地址的轉(zhuǎn)換技巧,需要的朋友可以參考下
    2015-03-03
  • python字符串拼接的7種方法及性能比較詳解

    python字符串拼接的7種方法及性能比較詳解

    這篇文章主要介紹了python字符串拼接的7種方法詳解,需要的朋友可以參考下
    2021-04-04
  • Python實(shí)現(xiàn)從概率分布中隨機(jī)采樣

    Python實(shí)現(xiàn)從概率分布中隨機(jī)采樣

    這篇文章主要介紹了通過幾個(gè)機(jī)器學(xué)習(xí)中最常用的概率分布為例,來看看如何從一個(gè)概率分布中采樣,文章中的代碼對我們的工作或?qū)W習(xí)具有一定價(jià)值,感興趣的朋友可以了解一下
    2021-12-12
  • 基于Python的視頻會議監(jiān)控工具

    基于Python的視頻會議監(jiān)控工具

    隨著遠(yuǎn)程辦公和在線教育的普及,視頻會議已成為日常工作中不可或缺的一部分,然而,會議過程中經(jīng)常遇到畫面卡頓、聲音延遲、連接中斷等問題,嚴(yán)重影響會議體驗(yàn),為了解決這些痛點(diǎn),我開發(fā)了一款基于Python的視頻會議監(jiān)控工具,需要的朋友可以參考下
    2026-06-06
  • Python判斷Nan值的五種方式小結(jié)

    Python判斷Nan值的五種方式小結(jié)

    這篇文章主要介紹了Python判斷Nan值的五種方式小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 深入分析Python中Lambda函數(shù)的用法

    深入分析Python中Lambda函數(shù)的用法

    lambda函數(shù)是Python中常用的內(nèi)置函數(shù),又稱為匿名函數(shù)。和普通函數(shù)相比,它只有函數(shù)體,省略了def和return,使得結(jié)構(gòu)看起來更精簡。本文將詳細(xì)說說Lambda函數(shù)的用法,需要的可以參考一下
    2022-12-12
  • 使用python-pptx創(chuàng)建PPT演示文檔功能實(shí)踐

    使用python-pptx創(chuàng)建PPT演示文檔功能實(shí)踐

    這篇文章主要介紹了使用python-pptx創(chuàng)建PPT演示文檔功能實(shí)踐,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評論

弋阳县| 乐亭县| 保山市| 民权县| 如东县| 玉溪市| 武冈市| 安新县| 天门市| 前郭尔| 梅河口市| 萨迦县| 吉木乃县| 武川县| 长宁县| 南开区| 肃北| 磐石市| 泰和县| 宁明县| 松潘县| 弥勒县| 韩城市| 塔城市| 潞城市| 正蓝旗| 赞皇县| 灵寿县| 同德县| 永年县| 宁城县| 安图县| 视频| 舟曲县| 伊春市| 宜兴市| 漳平市| 广昌县| 商城县| 福建省| 扎兰屯市|