Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9763

pythonnetについて

$
0
0
以前作っていたモニタリングするアプリケーションについて このアプリでは、通知やメッセージボックスなどの.NET系、OpenHardwareMonitorをPython.NETを使って呼び出しています。 Python.NETというのは、公式docにもあるように Python.NET (pythonnet) is a package that gives Python programmers nearly seamless integration with the .NET 4.0+ Common Language Runtime (CLR) on Windows and Mono runtime on Linux and OSX. Python.NET provides a powerful application scripting tool for .NET developers. Using this package you can script .NET applications or build entire applications in Python, using .NET services and components written in any language that targets the CLR (C#, VB.NET, F#, C++/CLI). 約(DeepL): Python.NET(pythonnet)は、PythonプログラマーにWindows上の.NET 4.0+ Common Language Runtime(CLR)や、LinuxやOSX上のMonoランタイムとのほぼシームレスな統合を提供するパッケージです。Python.NETは.NET開発者に強力なアプリケーションスクリプティングツールを提供します。本パッケージを使用することで、CLRをターゲットとした任意の言語(C#, VB.NET, F#, C++/CLI)で書かれた.NETサービスやコンポーネントを使用して、.NETアプリケーションをスクリプトしたり、アプリケーション全体をPythonで構築することができます。 要は、.NETの関数やクラスなどをpythonで使えるようにしたものです。 僕自身は大学での測定装置用ソフトウェアを作っていたときに出会いました。 使い方 最新版(2021/12/09時点)では2.7, 3.5~2.8で対応しています。3.9もv2.5.2で対応したみたいなこと書いてましたが、動きません。 以下でインストールできます。 pip install pythonnet 使う際は、次のコードをはじめに書きます。 import clr # pythonnetではないので注意(clr=Common Language Runtime) 使いたい関数などを使う場合は、そのアセンブリ名を追加する必要があります。例えば、System.ComponentModel.PrimitivesのContainerを使いたい場合であれば、 clr.AddReference('System.ComponentModel.Primitives') from System.ComponentModel import Container ちなみに公式ドキュメントとかにもないですが、アセンブリがどこにあるかを調べたいときは次で取れます。 directory = clr.FindAssembly('System.ComponentModel.Primitives') print(directory) # 'C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\\\System.ComponentModel.Primitives.dll' 例 とりあえずなんか呼び出してみましょう。 Windowsの通知センターにタイトルがpythonでHello World!を出すプログラムを作ってみます。 c#などを触った方がいれば、それと同じことをしてるだけです。 import os import clr import time # reference追加 clr.AddReference('System.Windows.Forms') clr.AddReference('System.ComponentModel.Primitives') clr.AddReference('System.Drawing') # import import System.Windows.Forms as Forms from System.ComponentModel import Container from System.Drawing import Icon, SystemIcons container = Container() notifyicon = Forms.NotifyIcon(container) def show_notification( title: str, message: str, app_icon: str = None) -> None: app_icon = app_icon if app_icon is not None and os.path.exists(app_icon): icon = Icon(app_icon) else: icon = SystemIcons.Application # なければ、デフォルトアイコン notifyicon.Icon = icon # アイコンをセット notifyicon.BalloonTipTitle = title # タイトルを決定 notifyicon.BalloonTipText = message # 表示メッセージ notifyicon.Visible = True # 見えるように notifyicon.ShowBalloonTip(1) # 表示時間(osの中身で決まってるので、引数はあんまし意味がない) if __name__ == '__main__': # icon(任意) icon = './shared.ico' # .icoファイルである必要あり show_notification(title = 'python', message='hello world!', app_icon=icon) time.sleep(7) container.Dispose() # 7s程度待たないとアイコンがバグる 結果: こんな感じで通知もできるわけです(同じことはpythonのplyerでもできます)。 C#等で自分の作ったプログラムをPythonで使いたい場合は、こういうPython.NETを使ってみてはどうでしょうか。 最後に、今回は.NETをPythonで呼び出しましたが、逆もできます。こちらについては、以下の記事を参照してください。 C#にpythonで作った処理を組み込む【pythonnet準備+確認編 2021年2月最新

Viewing all articles
Browse latest Browse all 9763

Trending Articles