1

IronPython Studio で Windows フォーム アプリケーションを開発しています。プロジェクトのアイコンを選択したいのですが、どちらも失敗します: 1- フォーム プロパティ ウィンドウ -> アイコン (*.ico ファイルを選択) コンパイル時エラーが発生し、IronPython.targets ファイルに関連しています。

「IronPythonCompilerTask」タスクが予期せず失敗しました。System.ArgumentNullException: 値を null にすることはできません。

2- *.ico ファイルをプロジェクトに追加し ([プロジェクト] -> [追加] -> [既存のアイテム])、そのプロパティで [ビルド アクション] を [埋め込みリソース] に変更しました。System.Reflection.Assembly を使用してアクセスできません。このリソース私のコード:

self.Icon = Icon(Assembly.GetExecutingAssembly().GetManifestResourceStream('IronPythonWinApp.myIcon.ico'))

実行時に例外をスローします。

呼び出されたメンバーは、動的アセンブリでサポートされているボットです

アイコンを IronPython WinForms に追加するより良い (最善の) 方法を知っている人はいますか?

ありがとう

4

1 に答える 1

4

IronPython は動的スクリプト言語です。アセンブリにコンパイルされるのではなく、実行時にスクリプト ファイル自体から解釈されます。コンパイルされたアセンブリがないため、リソースを埋め込むことはできません。IronPython でフォームにアイコンを追加するには、次の 2 つの方法があります。

まず、Python スクリプトと一緒にアイコンをルーズ ファイルとして含めることができます。次に、アイコン ファイル名を System.Drawing.Icon コンストラクターに渡すことで、アイコン オブジェクトを作成できます。これは、メインの Python スクリプトとアイコンが同じディレクトリにデプロイされているこのシナリオの例です。スクリプトは、ここにあるソリューションを使用しディレクトリを見つけます。

import clr
clr.AddReference('System.Drawing')
clr.AddReference('System.Windows.Forms')

import os
import __main__
from System.Drawing import Icon
from System.Windows.Forms import Form

scriptDirectory = os.path.dirname(__main__.__file__)
iconFilename = os.path.join(scriptDirectory, 'test.ico')
icon = Icon(iconFilename)

form = Form()
form.Icon = icon
form.ShowDialog()

または、たとえば C# で記述された .NET アセンブリに埋め込みリソースとして含まれているアイコンを読み込むこともできます。

import clr
clr.AddReference('System.Drawing')
clr.AddReference('System.Windows.Forms')

from System.Drawing import Icon
from System.Reflection import Assembly
from System.Windows.Forms import Form

assembly = Assembly.LoadFile('C:\\code\\IconAssembly.dll')
stream = assembly.GetManifestResourceStream('IconAssembly.Resources.test.ico')
icon = Icon(stream)

form = Form()
form.Icon = icon
form.ShowDialog()
于 2009-06-21T03:04:05.063 に答える