Metadata-Version: 2.4
Name: ikkVisualKit
Version: 0.1.1
Summary: Insight.k.k. VisualKit for easy application development
Author-email: "Insight.k.k. Team" <maintainer@insightkk.net>
License-Expression: MIT
Project-URL: Homepage, https://insightkk.net/oss/ikkVisualKit
Project-URL: Documentation, https://insightkk.net/oss/ikkVisualKit/api/index.html
Project-URL: Issues, https://github.com/Insight-kk/ikkVisualKit/issues
Project-URL: Source, https://github.com/Insight-kk/ikkVisualKit
Keywords: gui,tkinter,toolkit,ui,framework
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: User Interfaces
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: cantok>=0.0.1
Requires-Dist: asyncio-cancel-token>=0.2.0
Requires-Dist: pystray>=0.19.4
Requires-Dist: Pillow>=9.0
Requires-Dist: keyboard>=0.13.5
Requires-Dist: customtkinter>=5.2.2
Dynamic: license-file

# ikkVisualKit

## Overview
Pythonアプリケーション開発用の軽量GUIツールキット。tkinterとcustomtkinterをベースに、ウィンドウ、ダイアログ、システムトレイアプリケーション用の汎用コンポーネントを提供します。

## 主な機能

- **ウィンドウベースクラス** - CTkやtkinterベースのウィンドウを簡単に構築
- **ダイアログコンポーネント** - OK、YesNo、カスタムダイアログなど汎用ダイアログ
- **システムトレイ対応** - トレイメニュー、常駐アプリケーション機能
- **画像管理** - パッケージ内の画像リソースを統一的に管理

## インストール

```bash
pip install ikkVisualKit
```

# Feature
* CustomTkinterベース
* DPIスケーリング対応
* フォームアプリの作成が容易になるBaseクラスの提供
* フォームアプリ向けに
* 常駐(タスクトレイ)アプリの作成を用意するテンプレートの提供
* サイズの大きいカスタムメッセージダイアログの提供
* 常に手前に表示のON/OFF


# 利用方法
```python
from ikkVisualKit import WindowBaseModan    #ファームアプリを作成する場合
from ikkVisualKit import DialogResult       #ダイアログを利用する場合
```


# フォームアプリケーションの作成方法

## フォームの作成
1. `WindowBaseModan`を継承した任意のウインドウクラスを作成します。
1. `def _build(self, root):`をオーバライドして,`super()._build(root)`を実行します。
1. `show_window()`と`run()`を実行するとWindowアプリケーションが起動します。

```python
from ikkVisualKit import WindowBaseModan

class TestWindow(WindowBaseModan):
    def __init__(self):
        super().__init__(
            title="MyWindowSample",#アプリ名
            version="0.0.0",       #バージョン
            size=(600, 400),       #ウィンドウサイズ
            icon_path="resources/icon.dio.ico", #アイコンパス（.ico推奨）
            tray_app=False      #常駐アプリにしたいならTrue
            )
        
    def _build(self, root):
        super()._build(root)
        # UIパーツの配置
        self.btn1 = self.make_ActionButton(16 ,16,  image_key="setting.dio")      #設定
        #ツールチップの付加
        self.btn1.tooltip_text = "設定を開く"
        #ハンドラの設定
        self.btn1.OnClicked += self.on_btn1_click
    def on_btn1_click(self):
        self.show_ok_dialog(title="ボタンがクリックされました", message="これはテスト用のダイアログです。")
        self .WarningBlink()  # 警告点滅を開始
    @override
    def _loadAppState(self):
        pass #フォームロード後の処理（継承必須）ウインドウ状態の復元に利用してください
    @override
    def _backupAppState(self):
        pass #フォームクローズ前の処理（継承必須）ウインドウ状態保存に利用してください
```


## カスタムボタン
* 大中小３タイプのボタンサイズを用意
* ツールチップテキストをプロパティとして用意
* マウスホバー時の色変更
* ボタンに付与するアイコン画像を予め用意



### 小さいアイコン付きボタン
以下のコードは小さいサイズのアイコン付きボタンを作成する例です。
コンストラクタのx,yに配置する座標を指定し、image_keyで[アイコン](#小さいアイコン付きボタン)を指定してください。
ツールチップテキストと、イベントハンドラを後から登録することが可能です。
```python
self.btnSetting  = self.make_ActionButton(x=16 , y=176, image_key="setting.dio")
self.btnSetting.tooltip_text = "設定を開く"  #ツールチップテキスト設定
self.btnSetting.command = self.on_setting   #ボタン押下で実行する関数の登録
```
![alt text](./doc/image.png)

### 大きいサイズのボタン
大きいサイズのボタンを利用する場合ば`size_rank=1`もしくは`size_rank=2`を指定してください。また、`text=`で指定した文字がアイコンと共に表示されます。
```python
self.btnStart    = self.make_ActionButton(624, 16 , image_key="start.dio",size_rank=2,text="検査スタート")
self.btnClear    = self.make_ActionButton(784, 16 , image_key="clear.dio",size_rank=1,text="クリア")
```



### アイコンの一覧

Name           |Image
---------------|-------------------------
alert.dio      | ![alert.dio](ikkVisualKit/image/alert.dio.png)
alwaysTop.dio  | ![alwaysTop.dio](ikkVisualKit/image/alwaysTop.dio.png)
clear.dio      | ![clear.dio](ikkVisualKit/image/clear.dio.png)
disconnect.dio | ![disconnect.dio](ikkVisualKit/image/disconnect.dio.png)
error.dio      | ![error.dio](ikkVisualKit/image/error.dio.png)
focus.dio      | ![focus.dio](ikkVisualKit/image/focus.dio.png)
folder.dio     | ![folder.dio](ikkVisualKit/image/folder.dio.png)
goto.dio       | ![goto.dio](ikkVisualKit/image/goto.dio.png)
handyReader.dio| ![handyReader.dio](ikkVisualKit/image/handyReader.dio.png)
help.dio       | ![help.dio](ikkVisualKit/image/help.dio.png)
info.dio       | ![info.dio](ikkVisualKit/image/info.dio.png)
link.dio       | ![link.dio](ikkVisualKit/image/link.dio.png)
lock.dio       | ![lock.dio](ikkVisualKit/image/lock.dio.png)
log.dio        | ![log.dio](ikkVisualKit/image/log.dio.png)
open.dio       | ![open.dio](ikkVisualKit/image/open.dio.png)
recipe.dio     | ![recipe.dio](ikkVisualKit/image/recipe.dio.png)
save.dio       | ![save.dio](ikkVisualKit/image/save.dio.png)
search.dio     | ![search.dio](ikkVisualKit/image/search.dio.png)
setting.dio    | ![setting.dio](ikkVisualKit/image/setting.dio.png)
start.dio      | ![start.dio](ikkVisualKit/image/start.dio.png)
swap.dio       | ![swap.dio](ikkVisualKit/image/swap.dio.png)
unlock.dio     | ![unlock.dio](ikkVisualKit/image/unlock.dio.png)
warning.dio    | ![warning.dio](ikkVisualKit/image/warning.dio.png)

## 常に手前に表示
```python
ui.isAlwaysOnTop = True
```
