歡迎加入 FlexiTools 開發行列。
從環境建置、模組開發到 CI/CD 部署的完整技術手冊。
FlexiTools 基於 Python 3.9+ 與 Tkinter 構建。為了確保開發環境的一致性,我們強烈建議使用 Conda。
1. Clone 專案並進入目錄:
git clone https://github.com/jacky09299/FlexiTools.git
cd FlexiTools
2. 建立並啟用 Conda 環境:
conda env create -f environment.yml
conda activate tools
3. 驗證安裝:
python check_imports.py
check_imports.py 顯示 "All modules imported successfully",即代表環境設定完成。
modules/ - 功能模組存放處。每個子資料夾代表一個獨立功能。locales/ - 全域語言檔 (en_US.json, zh_TW.json)。tools/ - 建置腳本 (NSIS 生成、插件打包)。docs/ - 專案文件與網站源碼 (GitHub Pages)。main.py - 程式入口點。ui.py - ModularGUI 與 Module 基底類別定義。main.spec - PyInstaller 打包設定檔。installer.nsi.template - Windows 安裝程式腳本模板。
FlexiTools 採用高度模組化設計。開發新功能只需在 modules/ 目錄下建立新資料夾即可。
請參考 modules/template_module。
在模組資料夾中建立 manifest.json。這是版本控制與插件系統的依據。
{
"name": "my_new_tool",
"version": "1.0.0",
"title": "My New Tool",
"description": "A short description of the tool.",
"author": "Your Name"
}
建立 __init__.py 並繼承 Module 類別。這是模組的進入點。
import tkinter as tk
from tkinter import ttk, messagebox
from ui import Module
class MyNewTool(Module):
def __init__(self, master, shared_state, module_name="MyTool", gui_manager=None):
# 初始化基底類別
super().__init__(master, shared_state, module_name, gui_manager)
# 初始化 UI 元件變數
self.label = None
self.btn = None
# 建立介面
self.create_ui()
# 套用語言設定
self.update_language()
def create_ui(self):
"""建立 UI 元件,初始使用英文"""
self.label = ttk.Label(self.frame, text="Hello World")
self.label.pack(pady=20)
self.btn = ttk.Button(self.frame, text="Click Me", command=self.on_click)
self.btn.pack()
def update_language(self):
"""
當語言切換時被呼叫。
必須使用 self.tr(key, default) 更新所有顯示文字。
"""
super().update_language() # 更新視窗標題
# Guard Clause: 確保 UI 已建立
if not getattr(self, 'label', None):
return
# 更新元件文字
self.label.config(text=self.tr("module_mytool_hello", "Hello World"))
self.btn.config(text=self.tr("module_mytool_click", "Click Me"))
def on_click(self):
msg = self.tr("module_mytool_msg", "You clicked the button!")
messagebox.showinfo(self.module_name, msg)
create_ui 中直接使用英文字串開發。
locales/en_US.json 與 zh_TW.json 中加入對應的翻譯。
self.tr("KEY", "Default")。
update_language() 中重新設定元件文字。
// locales/en_US.json
{
"module_mytool_hello": "Hello World",
"module_mytool_click": "Click Me"
}
// locales/zh_TW.json
{
"module_mytool_hello": "你好,世界",
"module_mytool_click": "點擊我"
}
在提交程式碼前,請確保您的模組能通過建置流程。
# 啟動應用程式
python main.py
# 執行自動化測試
python verify_tutorials.py
需要安裝 NSIS。
# 1. 使用 PyInstaller 打包主程式
pyinstaller main.spec
# 2. 生成 NSIS 腳本 (自動掃描 modules/)
python tools/generate_nsis.py
# 3. 編譯安裝檔
makensis installer.nsi
編譯完成後,您將在根目錄看到 FlexiToolsInstaller.exe。
我們使用 .github/workflows/build.yml 自動化建置流程:
v*)。
模組也可以獨立更新。更新 docs/plugins.json 會觸發 tools/package_changed_plugins.py:
gh-pages 分支供使用者下載。Fork 專案並建立分支:feature/your-module-name。
遵循 Commit Message 規範,保持簡潔。
發送 PR 至 develop 分支。我們將會審查您的程式碼。