Как я могу полностью написать приложение IronPython Silverlight на Python и каковы минимально необходимые компоненты в HTML?

Я бился головой о стену в течение нескольких недель, чтобы собрать минимальный HTML-код для приложения IronPython Silverlight, которое использует Gestalt, как это было впервые предложено Джимми Шементи здесь: http://www.silverlight.net/learn/advanced-technologies/dynamic-languages​​/dynamic-languages-in-silverlight и здесь: http://ironpython.net/browser/gettingstarted.html

Но мне трудно загрузить приложение, которое что-либо делает. Каждый раз, когда я вставляю в примеры какой-либо собственный сценарий, приложение Silverlight либо не загружается, либо ничего не показывает в своем объекте. Я хочу иметь основу HTML, чтобы получить доступ к библиотекам Silverlight и начать кодировать / тестировать графику для своего приложения. (Но я еще не могу туда добраться.)

На основе его примеров я собрал следующий HTML-код, который вызывает мой visual.py - файл Python, который должен иметь возможность делать все, что делает файл XAML, путем доступа к библиотекам Silverlight.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <style type="text/css">
    html, body { height: 100%; overflow: auto; }
    body { padding: 0; margin: 0; }
    #silverlightControlHost { height: 90%; text-align: center; }
  </style>
  <script type="text/javascript">
    window.DLR = {settings: {windowless: 'true'}}
  </script>
  <script type="text/javascript" src="http://gestalt.ironpython.net/dlr-latest.js"></script>
  <title>webcam-mic</title>
</head>
<body>
  <script type="application/python" src="visual.py" id="python" width="100%" height="100%""></script>

</body>
</html>

Но это не работает. В вызываемом им файле .py есть: (также взяты из рабочих примеров IronPython из других источников)

from System.Windows import Application, Thickness
from System.Windows.Controls import (
    Button, Orientation, TextBlock,
    StackPanel, TextBox
)
from System.Windows.Input import Key

root = StackPanel(Width=500,Height=500)
textblock = TextBlock()
textblock.Margin = Thickness(20)
textblock.FontSize = 18
textblock.Text = 'Stuff goes here'
root.Children.Add(textblock)

panel = StackPanel()
panel.Margin = Thickness(20)
panel.Orientation = Orientation.Horizontal

button = Button()
button.Content = 'Push Me'
button.FontSize = 18
button.Margin = Thickness(10)

textbox = TextBox()
textbox.Text = "Type stuff here..."
textbox.FontSize = 18
textbox.Margin = Thickness(10)
textbox.Width = 200
#textbox.Watermark = 'Type Something Here'

def onClick(s, e):
    textblock.Text = textbox.Text
    textbox.Text = ""

def onKeyDown(sender, e):
    if e.Key == Key.Enter:
        e.Handled = True
        onClick(None, None)

button.Click += onClick
textbox.KeyDown += onKeyDown

panel.Children.Add(button)
panel.Children.Add(textbox)

root.Children.Add(panel)
Application.Current.RootVisual = root

Какие дополнительные компоненты мне нужны? (Проблема с версией dlr.js? Мои теги сценария? Версия Silverlight?) Все, что мне нужно, - это код, необходимый для создания полноэкранного приложения Silverlight, которое берет все свои элементы управления и графику из файла python. Пока ничего из того, что я собрал, не сработало. Я использую Firefox с Silverlight 4.0.


person David Zhou    schedule 26.11.2011    source источник
comment
Когда вы говорите «это не работает», что вы имеете в виду? Плагин Silverlight аварийно завершает работу или не загружается? Вы получаете сообщение об ошибке и / или трассировку стека? То же самое происходит в других браузерах?   -  person Luke Woodward    schedule 26.11.2011
comment
Начните с шаблона в IronPython-2.7\Silverlight\script и шаг за шагом корректируйте его в соответствии с вашим изображением.   -  person Lukas Cenovsky    schedule 26.11.2011
comment
Под ошибкой я подразумеваю, что либо апплет не загружается на HTML-страницу, либо апплет загружается, но его содержимое пустое, как будто у меня вообще не было кода Silverlight.   -  person David Zhou    schedule 27.11.2011
comment
Лукас, этот шаблон, о котором вы упомянули, требует использования Chiron и .xap для папки с файлом app.py. Я думаю, что использовать гештальт было бы намного проще, но оба варианта мне не подходят. Я просмотрел множество руководств в Интернете, но у меня есть проблемы с тем, чтобы заставить их работать.   -  person David Zhou    schedule 27.11.2011


Ответы (2)


Благодаря предложению Лукаса Ценовски и советам здесь:, я использовал sdl-sdk для создания шаблона, очень похожего на шаблон в IronPython-2.7\Silverlight\script, и создал файл .xap с Chiron и Mono. Я думал, что Gestalt избавит от необходимости использовать Chiron для создания .xap, но все, что работает. Спасибо всем!

Для справки в будущем команда Терминала для создания .xap выглядит примерно так: mono /path/to/Chiron.exe /d:directory_with_pyfile /z:name.xap

person David Zhou    schedule 26.11.2011

Как вы обслуживаете HTML-файл? Любой HTML-файл со ссылками должен обслуживаться веб-сервером, а не файловой системой, поэтому никаких URL-адресов file: //.

Вы также можете использовать Chiron для создания собственного файла .xap. Затем файл XAP может быть обслужен с любого веб-сервера, который вы хотите, но если вам нужен какой-либо разумный опыт разработки, вам придется использовать «Chiron.exe / w» в качестве веб-сервера.

person Jimmy Schementi    schedule 28.11.2011
comment
Я обслуживал его на университетском сервере для своего домена (и получал доступ с www). Я по ошибке попытался обслужить его из собственной файловой системы, но результаты были такими же - если апплет загружался, они были пустыми. Вчера вечером мне удалось заставить Chiron создавать файлы .xap для моего сервера и обслуживать их во время разработки, так что все в порядке. - person David Zhou; 28.11.2011
comment
Жаль, что первый вариант у вас не сработал; так работают все примеры на ironpython.net/browser/examples (например, ironpython.net/browser/examples/mushroom и ironpython.net/browser/examples/mandelbrot). Но использование файла .xap более выгодно для Silverlight, а использование ‹script type = text / python› - это умная уловка, чтобы убедить вас, что Интернет (и JavaScript) являются лучшими вариантами, чем Silverlight. - person Jimmy Schementi; 29.11.2011