こちらの続きです。
fletでpycatiaが利用出来ない - C#ATIA
えぇ利用出来ました。経緯を・・・
前回記載していませんでしたが、思いついた方法は2つのExeファイルを作成し
flet側のexeでpycatia側のexeを実行させる方法でした。
しかしここには問題が発生します。
二つのexeにしてしまうと、fletで選択したものをpycatiaに受け渡す事が困難に
なる上、逆の事も困難となります。
(今回必要としたものはflet->pycatiaなのでそれで問題は無いのですが)
先々の事を考え、ここを何とかクリアしたい所なので、Copilotに色々と
相談しました。
pycatiaと言うより、pywin32を使ったこんな感じの内容です。
import win32com.client app = win32com.client.Dispatch("CATIA.Application") #<-ここでエラー
後は、出力されるエラーを伝えたところ
import pythoncom
pythoncom.CoInitialize()
が必要と分かりました。どうやらCOMをクリアする処理っぽいです。
(その意義自体が分からない・・・)
とにかくこれを入れる事でエラーは解消しました。
では、pycatiaを利用する場合は何処に入れるべきか?になります。
公式のサンプルをお借りしてですが、エラーとなる箇所はこちらです。
pycatia/examples/example__hybrid_bodies__001.py at master · evereux/pycatia · GitHub
この直前に入れてみるもののやはりエラー・・・
"もう、直接書き足すしかないな"と思いつつも、実はインポートしている
from pycatia import catia
の処理が何処に記載されているのかが分かっていませんでした。
モソモソ調べた結果、こちらが該当箇所の様です。
pycatia/pycatia/base_interfaces/base_application.py at master · evereux/pycatia · GitHub
で、よく見ると・・・pythoncom.CoInitialize()の記載があるじゃない。
つまり、
caa = catia()
ではエラーとなりますが、
caa = catia(True)
でエラーを回避出来ます。・・・4文字追加するだけです。
と言う事、flet+pycatiaの無意味なサンプルです。
import flet as ft from pycatia import catia def call_catia(): try: caa = catia(True) part_document = caa.active_document part = part_document.part bodies = part.bodies caa.message_box(bodies[0].name) except Exception as e: print(f"Error: {e}") def main(page: ft.Page): page.title = "Flet-Pycatia Example" win = page.window win.width = 300 win.height = 100 def on_click(e): call_catia() open_button = ft.TextButton("Click", on_click=on_click) page.add(open_button) ft.app(target=main)