欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python開(kāi)發(fā)一個(gè)智能桌面單詞記憶工具

 更新時(shí)間:2025年06月04日 08:07:07   作者:創(chuàng)客白澤  
在英語(yǔ)學(xué)習(xí)過(guò)程中,高頻重復(fù)是記憶單詞的關(guān)鍵,本文將使用Python和PyQt5打造一個(gè)智能桌面單詞記憶工具,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、概述:當(dāng)單詞記憶遇上Python GUI

在英語(yǔ)學(xué)習(xí)過(guò)程中,高頻重復(fù)是記憶單詞的關(guān)鍵。傳統(tǒng)背單詞軟件往往需要用戶主動(dòng)打開(kāi)應(yīng)用,而本項(xiàng)目的創(chuàng)新之處在于開(kāi)發(fā)了一個(gè)桌面懸浮窗單詞記憶工具,具有以下核心特點(diǎn):

  • 無(wú)干擾學(xué)習(xí):半透明懸浮窗始終置頂顯示
  • 智能記憶算法:支持順序/逆序/隨機(jī)三種循環(huán)模式
  • 快捷交互:F8熱鍵一鍵切換中英釋義
  • 高度可定制:字體/顏色/間隔時(shí)間全面可配置
  • 輕量化設(shè)計(jì):系統(tǒng)托盤(pán)運(yùn)行,內(nèi)存占用<50MB

本文將深入解析200+行代碼的實(shí)現(xiàn)原理,并提供完整的可執(zhí)行方案。

二、功能架構(gòu)設(shè)計(jì)

2.1 核心功能模塊

單詞顯示模塊

  • 定時(shí)切換顯示
  • 中英雙語(yǔ)切換
  • 視覺(jué)樣式定制

交互控制模塊

  • 全局熱鍵監(jiān)聽(tīng)
  • 拖拽移動(dòng)窗口
  • 系統(tǒng)托盤(pán)菜單

配置管理模塊

  • QSettings持久化
  • 詞庫(kù)動(dòng)態(tài)加載
  • 設(shè)置實(shí)時(shí)生效

2.2 技術(shù)選型對(duì)比

技術(shù)方案優(yōu)勢(shì)本項(xiàng)目選擇原因
PyQt5成熟GUI框架跨平臺(tái)支持好
pynput全局熱鍵監(jiān)聽(tīng)比win32api更簡(jiǎn)潔
QSettings配置存儲(chǔ)無(wú)需額外數(shù)據(jù)庫(kù)

三、效果展示

3.1 主界面效果

3.2 設(shè)置面板

3.3 系統(tǒng)托盤(pán)菜單

四、實(shí)現(xiàn)步驟詳解

4.1 環(huán)境準(zhǔn)備

pip install PyQt5 pynput

4.2 詞庫(kù)文件格式

創(chuàng)建words.txt(每行一個(gè)單詞+釋義):

apple 蘋(píng)果
banana 香蕉

4.3 核心類(lèi)解析

4.3.1 熱鍵監(jiān)聽(tīng)線程

class HotkeyWorker(QObject):
    toggle_signal = pyqtSignal()
    
    def run(self):
        from pynput import keyboard
        
        def on_activate_f8():
            self.toggle_signal.emit()
            
        with keyboard.GlobalHotKeys({'<F8>': on_activate_f8}) as listener:
            listener.join()

關(guān)鍵點(diǎn):

  • 使用QObject實(shí)現(xiàn)跨線程信號(hào)通信
  • pynput庫(kù)實(shí)現(xiàn)全局熱鍵監(jiān)聽(tīng)
  • 異常處理保障穩(wěn)定性

4.3.2 主窗口類(lèi)

class WordDisplayApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
        self.setAttribute(Qt.WA_TranslucentBackground)

窗口特性:

  • FramelessWindowHint:無(wú)邊框
  • WindowStaysOnTopHint:始終置頂
  • WA_TranslucentBackground:半透明效果

4.4 配置持久化實(shí)現(xiàn)

self.settings = QSettings("WordDisplay", "WordDisplayApp")

# 保存配置
self.settings.setValue("interval", self.interval)

# 讀取配置
self.interval = self.settings.value("interval", 5, type=int)

存儲(chǔ)位置:

  • Windows:注冊(cè)表HKEY_CURRENT_USER\Software\WordDisplay\WordDisplayApp
  • Mac:~/Library/Preferences/com.WordDisplay.WordDisplayApp.plist

五、代碼深度解析

5.1 單詞加載算法

def load_words(self):
    if self.order == "reverse":
        self.word_list.reverse()
    elif self.order == "random":
        random.shuffle(self.word_list)

記憶算法優(yōu)化:

  • 隨機(jī)模式:避免固定順序記憶
  • 逆序模式:強(qiáng)化尾部單詞記憶
  • 間隔重復(fù):通過(guò)定時(shí)器控制顯示節(jié)奏

5.2 拖拽移動(dòng)實(shí)現(xiàn)

def mousePressEvent(self, event):
    self.dragging = True
    self.offset = event.globalPos() - self.pos()

def mouseMoveEvent(self, event):
    if self.dragging:
        self.move(event.globalPos() - self.offset)

交互細(xì)節(jié):

  • 記錄鼠標(biāo)點(diǎn)擊位置與窗口位置的偏移量
  • 實(shí)時(shí)計(jì)算新窗口位置
  • 鼠標(biāo)釋放時(shí)重置狀態(tài)

5.3 系統(tǒng)托盤(pán)集成

self.tray_icon = QSystemTrayIcon(self)
tray_menu = QMenu()
exit_action = QAction("退出", self)
exit_action.triggered.connect(self.quit_app)
tray_menu.addAction(exit_action)

多平臺(tái)適配:

  • Windows/Mac/Linux通用實(shí)現(xiàn)
  • 雙擊圖標(biāo)顯示/隱藏窗口
  • 右鍵彈出功能菜單

六、完整源碼下載

import sys
import random
import os
from PyQt5.QtWidgets import (QApplication, QMainWindow, QLabel, QSystemTrayIcon,
                            QMenu, QAction, QWidget, QVBoxLayout, QPushButton,
                            QSpinBox, QComboBox, QColorDialog, QMessageBox, 
                            QDesktopWidget, QFileDialog)
from PyQt5.QtGui import QColor, QFont, QIcon, QPixmap, QCursor
from PyQt5.QtCore import Qt, QTimer, QSettings, QSize, QThread, pyqtSignal, QObject, QPoint

class HotkeyWorker(QObject):
    """處理全局快捷鍵的工作線程"""
    toggle_signal = pyqtSignal()
    error_signal = pyqtSignal(str)

    def __init__(self):
        super().__init__()
        self.listener = None

    def run(self):
        """啟動(dòng)熱鍵監(jiān)聽(tīng)"""
        try:
            from pynput import keyboard

            def on_activate_f8():
                self.toggle_signal.emit()

            with keyboard.GlobalHotKeys({'<F8>': on_activate_f8}) as self.listener:
                self.listener.join()
        except ImportError as e:
            self.error_signal.emit("未安裝pynput庫(kù),無(wú)法使用F8快捷鍵功能")
        except Exception as e:
            self.error_signal.emit(f"快捷鍵初始化失敗: {str(e)}")

    def stop(self):
        """停止熱鍵監(jiān)聽(tīng)"""
        if self.listener:
            self.listener.stop()

class WordDisplayApp(QMainWindow):
    def __init__(self):
        super().__init__()
        
        # 初始化設(shè)置
        self.settings = QSettings("WordDisplay", "WordDisplayApp")
        self.load_settings()
        
        # 初始化UI
        self.init_ui()
        
        # 加載單詞數(shù)據(jù)
        self.word_list = []
        self.current_word_file = "words.txt"  # 默認(rèn)詞庫(kù)文件
        self.load_words()
        
        # 設(shè)置當(dāng)前單詞索引
        self.current_index = 0
        
        # 顯示第一個(gè)單詞
        self.show_word()
        
        # 設(shè)置定時(shí)器
        self.timer = QTimer()
        self.timer.timeout.connect(self.show_next_word)
        self.timer.start(self.interval * 1000)
        
        # 中文釋義是否顯示
        self.show_translation = False
        
        # 初始化熱鍵線程
        self.init_hotkey_thread()
        
        # 拖動(dòng)相關(guān)變量
        self.dragging = False
        self.offset = QPoint()

    def init_hotkey_thread(self):
        """初始化熱鍵監(jiān)聽(tīng)線程"""
        self.hotkey_thread = QThread()
        self.hotkey_worker = HotkeyWorker()
        self.hotkey_worker.moveToThread(self.hotkey_thread)
        
        # 連接信號(hào)
        self.hotkey_worker.toggle_signal.connect(self.toggle_translation)
        self.hotkey_worker.error_signal.connect(self.show_error_message)
        
        # 啟動(dòng)線程
        self.hotkey_thread.started.connect(self.hotkey_worker.run)
        self.hotkey_thread.start()

    def show_error_message(self, message):
        """顯示錯(cuò)誤消息"""
        QMessageBox.warning(self, "警告", message)

    def init_ui(self):
        """初始化用戶界面"""
        self.setWindowTitle("單詞顯示")
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Tool)
        self.setAttribute(Qt.WA_TranslucentBackground)
        
        # 創(chuàng)建主部件
        main_widget = QWidget()
        self.setCentralWidget(main_widget)
        
        # 布局
        layout = QVBoxLayout()
        layout.setContentsMargins(10, 10, 10, 10)
        main_widget.setLayout(layout)
        
        # 英文單詞標(biāo)簽
        self.word_label = QLabel("單詞加載中...")
        self.word_label.setAlignment(Qt.AlignCenter)
        self.word_label.setFont(QFont("Arial", self.english_font_size))
        self.word_label.setStyleSheet(f"color: {self.word_color.name()};")
        
        # 中文翻譯標(biāo)簽
        self.translation_label = QLabel()
        self.translation_label.setAlignment(Qt.AlignCenter)
        self.translation_label.setFont(QFont("微軟雅黑", self.chinese_font_size))
        self.translation_label.setStyleSheet(f"color: {self.translation_color.name()};")
        self.translation_label.hide()
        
        # 添加到布局
        layout.addWidget(self.word_label)
        layout.addWidget(self.translation_label)
        
        # 系統(tǒng)托盤(pán)圖標(biāo)
        self.init_system_tray()
        
        # 移動(dòng)到右上角
        self.move_to_top_right()

    def init_system_tray(self):
        """初始化系統(tǒng)托盤(pán)圖標(biāo)"""
        self.tray_icon = QSystemTrayIcon(self)
        
        # 設(shè)置圖標(biāo)
        icon_path = os.path.join(os.path.dirname(__file__), "icon.ico")
        if os.path.exists(icon_path):
            self.tray_icon.setIcon(QIcon(icon_path))
        else:
            # 創(chuàng)建默認(rèn)圖標(biāo)
            pixmap = QPixmap(QSize(64, 64))
            pixmap.fill(Qt.transparent)
            self.tray_icon.setIcon(QIcon(pixmap))
            QMessageBox.warning(self, "圖標(biāo)未找到", f"未找到圖標(biāo)文件: {icon_path}")
        
        # 創(chuàng)建托盤(pán)菜單
        tray_menu = QMenu()
        
        # 顯示/隱藏主窗口
        toggle_action = QAction("顯示/隱藏", self)
        toggle_action.triggered.connect(self.toggle_visibility)
        tray_menu.addAction(toggle_action)
        
        # 重置位置
        reset_pos_action = QAction("重置位置", self)
        reset_pos_action.triggered.connect(self.move_to_top_right)
        tray_menu.addAction(reset_pos_action)
        
        # 設(shè)置
        settings_action = QAction("設(shè)置", self)
        settings_action.triggered.connect(self.show_settings_dialog)
        tray_menu.addAction(settings_action)
        
        # 加載詞庫(kù)
        load_dict_action = QAction("加載詞庫(kù)", self)
        load_dict_action.triggered.connect(self.load_new_dictionary)
        tray_menu.addAction(load_dict_action)
        
        # 退出
        exit_action = QAction("退出", self)
        exit_action.triggered.connect(self.quit_app)
        tray_menu.addAction(exit_action)
        
        self.tray_icon.setContextMenu(tray_menu)
        self.tray_icon.show()
        
        # 托盤(pán)圖標(biāo)點(diǎn)擊事件
        self.tray_icon.activated.connect(self.on_tray_icon_activated)

    def on_tray_icon_activated(self, reason):
        """托盤(pán)圖標(biāo)點(diǎn)擊事件處理"""
        if reason == QSystemTrayIcon.DoubleClick:
            self.toggle_visibility()

    def move_to_top_right(self):
        """將窗口移動(dòng)到屏幕右上角"""
        screen = QDesktopWidget().screenGeometry()
        self.move(screen.width() - self.width() - 20, 20)

    def mousePressEvent(self, event):
        """鼠標(biāo)按下事件"""
        if event.button() == Qt.LeftButton:
            self.dragging = True
            self.offset = event.globalPos() - self.pos()
            event.accept()
            self.setCursor(QCursor(Qt.SizeAllCursor))

    def mouseMoveEvent(self, event):
        """鼠標(biāo)移動(dòng)事件"""
        if self.dragging and event.buttons() & Qt.LeftButton:
            self.move(event.globalPos() - self.offset)
            event.accept()

    def mouseReleaseEvent(self, event):
        """鼠標(biāo)釋放事件"""
        if event.button() == Qt.LeftButton:
            self.dragging = False
            self.setCursor(QCursor(Qt.ArrowCursor))
            event.accept()

    def load_words(self, file_path=None):
        """從文件加載單詞數(shù)據(jù)"""
        try:
            if file_path is None:
                file_path = self.current_word_file
            
            with open(file_path, "r", encoding="utf-8") as f:
                self.word_list = []
                for line in f:
                    line = line.strip()
                    if line:
                        parts = line.split(maxsplit=1)
                        if len(parts) == 2:
                            self.word_list.append({
                                "word": parts[0],
                                "translation": parts[1]
                            })
            
            # 根據(jù)順序設(shè)置處理單詞列表
            if self.order == "reverse":
                self.word_list.reverse()
            elif self.order == "random":
                random.shuffle(self.word_list)
                
            if not self.word_list:
                self.word_list.append({
                    "word": "示例單詞",
                    "translation": "example translation"
                })
                
        except FileNotFoundError:
            QMessageBox.critical(self, "錯(cuò)誤", f"未找到詞庫(kù)文件: {file_path}")
            self.word_list = [{
                "word": "示例單詞",
                "translation": "example translation"
            }]
        except Exception as e:
            QMessageBox.critical(self, "錯(cuò)誤", f"加載詞庫(kù)失敗: {str(e)}")
            self.word_list = [{
                "word": "加載失敗",
                "translation": "load failed"
            }]

    def load_new_dictionary(self):
        """加載新的詞庫(kù)文件"""
        file_path, _ = QFileDialog.getOpenFileName(
            self, "選擇詞庫(kù)文件", "", "文本文件 (*.txt);;所有文件 (*)"
        )
        
        if file_path:
            self.current_word_file = file_path
            self.load_words(file_path)
            self.current_index = 0
            self.show_word()
            
            # 保存當(dāng)前詞庫(kù)路徑
            self.settings.setValue("current_word_file", file_path)

    def show_word(self):
        """顯示當(dāng)前單詞"""
        if not self.word_list:
            return
            
        word_data = self.word_list[self.current_index]
        self.word_label.setText(word_data["word"])
        self.translation_label.setText(word_data["translation"])

    def show_next_word(self):
        """顯示下一個(gè)單詞"""
        if not self.word_list:
            return
            
        if self.order == "random":
            self.current_index = random.randint(0, len(self.word_list) - 1)
        else:
            self.current_index += 1
            if self.current_index >= len(self.word_list):
                self.current_index = 0
        
        self.show_word()

    def toggle_translation(self):
        """切換翻譯顯示狀態(tài)"""
        self.show_translation = not self.show_translation
        self.translation_label.setVisible(self.show_translation)
        
        # 根據(jù)翻譯顯示狀態(tài)控制定時(shí)器
        if self.show_translation:
            self.timer.stop()  # 顯示翻譯時(shí)暫停計(jì)時(shí)器
        else:
            self.timer.start(self.interval * 1000)  # 隱藏翻譯時(shí)恢復(fù)計(jì)時(shí)器

    def show_settings_dialog(self):
        """顯示設(shè)置對(duì)話框"""
        self.settings_dialog = QWidget()
        self.settings_dialog.setWindowTitle("設(shè)置")
        self.settings_dialog.setWindowModality(Qt.ApplicationModal)
        self.settings_dialog.setFixedSize(350, 450)
        
        layout = QVBoxLayout()
        layout.setContentsMargins(10, 10, 10, 10)
        
        # 間隔時(shí)間設(shè)置
        interval_label = QLabel("顯示間隔(秒):")
        self.interval_spinbox = QSpinBox()
        self.interval_spinbox.setRange(1, 3600)
        self.interval_spinbox.setValue(self.interval)
        
        # 單詞順序設(shè)置
        order_label = QLabel("單詞順序:")
        self.order_combobox = QComboBox()
        self.order_combobox.addItems(["順序", "逆序", "隨機(jī)"])
        self.order_combobox.setCurrentIndex(["normal", "reverse", "random"].index(self.order))
        
        # 英文字體大小設(shè)置
        english_fontsize_label = QLabel("英文單詞字體大小:")
        self.english_fontsize_spinbox = QSpinBox()
        self.english_fontsize_spinbox.setRange(8, 72)
        self.english_fontsize_spinbox.setValue(self.english_font_size)
        
        # 中文字體大小設(shè)置
        chinese_fontsize_label = QLabel("中文翻譯字體大小:")
        self.chinese_fontsize_spinbox = QSpinBox()
        self.chinese_fontsize_spinbox.setRange(8, 72)
        self.chinese_fontsize_spinbox.setValue(self.chinese_font_size)
        
        # 單詞顏色設(shè)置
        word_color_label = QLabel("單詞顏色:")
        self.word_color_button = QPushButton()
        self.word_color_button.setStyleSheet(f"background-color: {self.word_color.name()};")
        self.word_color_button.clicked.connect(lambda: self.choose_color("word"))
        
        # 翻譯顏色設(shè)置
        trans_color_label = QLabel("翻譯顏色:")
        self.trans_color_button = QPushButton()
        self.trans_color_button.setStyleSheet(f"background-color: {self.translation_color.name()};")
        self.trans_color_button.clicked.connect(lambda: self.choose_color("translation"))
        
        # 保存按鈕
        save_button = QPushButton("保存設(shè)置")
        save_button.clicked.connect(self.save_settings)
        
        # 重新加載當(dāng)前詞庫(kù)按鈕
        reload_button = QPushButton("重新加載當(dāng)前詞庫(kù)")
        reload_button.clicked.connect(lambda: self.load_words(self.current_word_file))
        
        # 添加到布局
        layout.addWidget(interval_label)
        layout.addWidget(self.interval_spinbox)
        layout.addWidget(order_label)
        layout.addWidget(self.order_combobox)
        layout.addWidget(english_fontsize_label)
        layout.addWidget(self.english_fontsize_spinbox)
        layout.addWidget(chinese_fontsize_label)
        layout.addWidget(self.chinese_fontsize_spinbox)
        layout.addWidget(word_color_label)
        layout.addWidget(self.word_color_button)
        layout.addWidget(trans_color_label)
        layout.addWidget(self.trans_color_button)
        layout.addWidget(save_button)
        layout.addWidget(reload_button)
        layout.addStretch()
        
        self.settings_dialog.setLayout(layout)
        self.settings_dialog.show()

    def choose_color(self, color_type):
        """選擇顏色"""
        color = QColorDialog.getColor()
        if color.isValid():
            if color_type == "word":
                self.word_color = color
                self.word_color_button.setStyleSheet(f"background-color: {color.name()};")
            else:
                self.translation_color = color
                self.trans_color_button.setStyleSheet(f"background-color: {color.name()};")

    def save_settings(self):
        """保存設(shè)置"""
        self.interval = self.interval_spinbox.value()
        
        order_index = self.order_combobox.currentIndex()
        if order_index == 0:
            self.order = "normal"
        elif order_index == 1:
            self.order = "reverse"
        else:
            self.order = "random"
        
        self.english_font_size = self.english_fontsize_spinbox.value()
        self.chinese_font_size = self.chinese_fontsize_spinbox.value()
        
        # 保存到QSettings
        self.settings.setValue("interval", self.interval)
        self.settings.setValue("order", self.order)
        self.settings.setValue("english_font_size", self.english_font_size)
        self.settings.setValue("chinese_font_size", self.chinese_font_size)
        self.settings.setValue("word_color", self.word_color.name())
        self.settings.setValue("translation_color", self.translation_color.name())
        
        # 應(yīng)用設(shè)置
        self.apply_settings()
        self.settings_dialog.close()

    def apply_settings(self):
        """應(yīng)用當(dāng)前設(shè)置"""
        # 更新定時(shí)器間隔
        self.timer.stop()
        if not self.show_translation:  # 只有隱藏翻譯時(shí)才啟動(dòng)計(jì)時(shí)器
            self.timer.start(self.interval * 1000)
        
        # 更新字體大小
        self.word_label.setFont(QFont("Arial", self.english_font_size))
        self.translation_label.setFont(QFont("微軟雅黑", self.chinese_font_size))
        
        # 更新顏色
        self.word_label.setStyleSheet(f"color: {self.word_color.name()};")
        self.translation_label.setStyleSheet(f"color: {self.translation_color.name()};")
        
        # 如果需要,重新排序單詞
        if self.order == "reverse":
            self.word_list.reverse()
        elif self.order == "random":
            random.shuffle(self.word_list)
        
        # 重置索引
        self.current_index = 0
        self.show_word()

    def toggle_visibility(self):
        """切換窗口可見(jiàn)性"""
        if self.isVisible():
            self.hide()
        else:
            self.show()
            self.move_to_top_right()

    def quit_app(self):
        """退出應(yīng)用程序"""
        # 停止熱鍵線程
        if hasattr(self, 'hotkey_thread'):
            self.hotkey_worker.stop()
            self.hotkey_thread.quit()
            self.hotkey_thread.wait()
        
        # 保存設(shè)置
        self.settings.sync()
        QApplication.quit()

    def closeEvent(self, event):
        """重寫(xiě)關(guān)閉事件"""
        event.ignore()
        self.hide()

    def load_settings(self):
        """加載設(shè)置"""
        # 默認(rèn)設(shè)置
        self.interval = self.settings.value("interval", 5, type=int)
        self.order = self.settings.value("order", "normal")
        self.english_font_size = self.settings.value("english_font_size", 24, type=int)
        self.chinese_font_size = self.settings.value("chinese_font_size", 20, type=int)
        self.current_word_file = self.settings.value("current_word_file", "words.txt")
        
        # 顏色設(shè)置
        self.word_color = QColor(self.settings.value("word_color", "#000000"))
        self.translation_color = QColor(self.settings.value("translation_color", "#888888"))

if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setQuitOnLastWindowClosed(False)
    
    # 設(shè)置應(yīng)用程序圖標(biāo)
    icon_path = os.path.join(os.path.dirname(__file__), "icon.ico")
    if os.path.exists(icon_path):
        app.setWindowIcon(QIcon(icon_path))
    
    word_app = WordDisplayApp()
    word_app.hide()
    
    sys.exit(app.exec_())

項(xiàng)目結(jié)構(gòu):

word-display/
├── main.py            # 主程序
├── words.txt          # 示例詞庫(kù)
├── icon.ico           # 程序圖標(biāo)
└── requirements.txt   # 依賴庫(kù)

七、擴(kuò)展開(kāi)發(fā)建議

7.1 功能增強(qiáng)方向

記憶曲線算法:根據(jù)艾賓浩斯曲線調(diào)整單詞出現(xiàn)頻率

云端同步:增加詞庫(kù)網(wǎng)絡(luò)同步功能

發(fā)音功能:集成TTS引擎朗讀單詞

7.2 性能優(yōu)化建議

# 使用LRU緩存最近顯示的單詞
from functools import lru_cache

@lru_cache(maxsize=50)
def get_word_style(word):
    return generate_style(word)

八、總結(jié)

本文詳細(xì)解析了基于PyQt5的單詞記憶工具開(kāi)發(fā)全過(guò)程,關(guān)鍵技術(shù)點(diǎn)包括:

  • 多線程熱鍵監(jiān)聽(tīng)的實(shí)現(xiàn)方案
  • QSettings配置持久化的最佳實(shí)踐
  • 無(wú)邊框窗口的交互細(xì)節(jié)處理
  • 系統(tǒng)托盤(pán)應(yīng)用的開(kāi)發(fā)模式

該項(xiàng)目的創(chuàng)新價(jià)值在于:

  • 將被動(dòng)記憶轉(zhuǎn)化為主動(dòng)感知
  • 極簡(jiǎn)主義設(shè)計(jì)哲學(xué)的應(yīng)用
  • 可擴(kuò)展的架構(gòu)設(shè)計(jì)

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

相關(guān)文章

  • Python實(shí)現(xiàn)將Excel內(nèi)容插入到Word模版中

    Python實(shí)現(xiàn)將Excel內(nèi)容插入到Word模版中

    前段時(shí)間因?yàn)樾枰幚硪淮蠖羊?yàn)收單,都是一些簡(jiǎn)單的復(fù)制粘貼替換工作,于是就想到用python進(jìn)行處理。本文分享了用python將excel文件單元格內(nèi)容插入到word模版中并保存為新文件的辦法,希望對(duì)大家有所幫助
    2023-03-03
  • 多線程爬蟲(chóng)批量下載pcgame圖片url 保存為xml的實(shí)現(xiàn)代碼

    多線程爬蟲(chóng)批量下載pcgame圖片url 保存為xml的實(shí)現(xiàn)代碼

    用Python寫(xiě)的多線程爬蟲(chóng)批量下載pcgame的圖片url并保存為xml格式,主要是邏輯代碼,喜歡的朋友可以測(cè)試下
    2013-01-01
  • Python 數(shù)據(jù)處理庫(kù) pandas進(jìn)階教程

    Python 數(shù)據(jù)處理庫(kù) pandas進(jìn)階教程

    在前面一篇文章中,我們對(duì)pandas做了一些入門(mén)介紹。本文是它的進(jìn)階篇。在這篇文章中,我們會(huì)講解一些更深入的知識(shí)
    2018-04-04
  • 利用Pygame制作躲避僵尸游戲

    利用Pygame制作躲避僵尸游戲

    本文參考了神廟逃亡,利用Pygame實(shí)現(xiàn)一個(gè)人躲避僵尸的小游戲,主要的是精靈、精靈組之間相撞、相交的處理,感興趣的可以了解一下
    2022-05-05
  • Python3 re.search()方法的具體使用

    Python3 re.search()方法的具體使用

    本文主要介紹了Python3 re.search()方法的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • python 數(shù)據(jù)庫(kù)查詢返回list或tuple實(shí)例

    python 數(shù)據(jù)庫(kù)查詢返回list或tuple實(shí)例

    這篇文章主要介紹了python 數(shù)據(jù)庫(kù)查詢返回list或tuple實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • OpenCV半小時(shí)掌握基本操作之邊緣檢測(cè)

    OpenCV半小時(shí)掌握基本操作之邊緣檢測(cè)

    這篇文章主要介紹了OpenCV基本操作之邊緣檢測(cè),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • python圖片水印加密的幾種處理小結(jié)

    python圖片水印加密的幾種處理小結(jié)

    本文主要介紹了python圖片水印加密的幾種處理小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Pycharm使用爬蟲(chóng)時(shí)遇到etree紅線問(wèn)題及解決

    Pycharm使用爬蟲(chóng)時(shí)遇到etree紅線問(wèn)題及解決

    這篇文章主要介紹了Pycharm使用爬蟲(chóng)時(shí)遇到etree紅線問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 簡(jiǎn)單講解Python中的字符串與字符串的輸入輸出

    簡(jiǎn)單講解Python中的字符串與字符串的輸入輸出

    這篇文章主要介紹了Python中的字符串與字符串的輸入輸出,Python3.x版本中默認(rèn)以Unicode為編碼,省去了不少麻煩,需要的朋友可以參考下
    2016-03-03

最新評(píng)論