Доступ к встроенным ресурсам в IronPython

Я разрабатываю приложение Windows Forms в IronPython Studio. Я хочу выбрать значок для своего проекта, но оба они терпят неудачу: 1- Окно свойств формы -> Значок (выберите файл *.ico) возникает ошибка времени компиляции, связанная с файлом IronPython.targets

Неожиданный сбой задачи IronPythonCompilerTask. System.ArgumentNullException: значение не может быть нулевым.

2- Я добавляю файл *.ico в проект (Проект -> Добавить -> Существующий элемент) и в его свойствах меняю «Действие сборки» на «Встроенный ресурс», теперь я не могу использовать System.Reflection.Assembly для получения доступа к этот ресурс мой код:

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

во время выполнения выдает исключение:

Вызванный член поддерживается ботом в динамической сборке.

Кто-нибудь знает лучший (лучший?) способ добавить значок в IronPython WinForms?

Благодарность


person Mehdi Asgari    schedule 26.02.2009    source источник


Ответы (1)


IronPython — динамический язык сценариев; он интерпретируется во время выполнения из самих файлов сценариев, а не компилируется в сборку. Поскольку нет скомпилированной сборки, у вас не может быть встроенного ресурса. Вот два способа добавить значок в форму в IronPython:

Во-первых, вы можете включить значок в виде отдельного файла вместе со сценариями 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()

Кроме того, вы можете загрузить значок, включенный в качестве встроенного ресурса в сборку .NET, например, написанную на C#.

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()
person Tarsier    schedule 21.06.2009