Я закончил тем, что использовал WPF.
Получение доступа к функциональности из IronPython является более сложным, чем я ожидал:
import clr
clr.AddReferenceByName("PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")
clr.AddReferenceByName("PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")
clr.AddReferenceByName("WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")
import System.Windows
(я не уверен, смогу ли я /должен изменить номер версии. PublicKeyToken
предположительно имеет отношение к какой-то подписи DLL в целях безопасности; я не знаю, почему WPF требует этого, но WinForms этого не сделал.)
Поскольку пространства имен длявиджеты становятся довольно волосатыми, и я хочу импортировать множество имен, я настроил некоторый динамический код импорта:
def Import(namespace, what):
if isinstance(what, str):
globals()[what] = getattr(namespace, what)
else:
for k, v in what.items():
if k: namespace = getattr(namespace, k)
for name in v:
Import(namespace, name)
После того, как мы выяснили правильную комбинацию инструментов макета (что было не так простотак как это резюме звучит так), кажется, что все "просто работает", и я вполне доволен.Поведение прокрутки выполняется путем установки ScrollViewer
в главном окне и установки HorizontalScrollBarVisibility
в Auto
.Внутри ScrollViewer
я поместил StackPanel
, который складывает «рамки поля», каждый из которых представляет собой Grid
с двумя столбцами (я добавляю два ColumnDefinition
по умолчанию к Grid.ColumnDefinitions
).Я установил «метку» в столбце 0 и виджет «значение» (поле со списком, кнопка и т. Д.) В столбце 1 с HorizontalAlignment
из Right
.
Я не установилдо вложенных панелей, но кажется, что это не должно быть сложно.Я уже поиграл с системой для привязки событий к кнопкам.