2010-12-31 4 views
1

Это трудно объяснить без иллюстрации, поэтому - вот, иллюстрация, слепленный из скриншотов несколько примеров привет мира и много краски работы:Как создать графический интерфейс, который ведет себя так?

GUI mockup

Я начал с использованием Windows, Формы на .NET (через IronPython, но это не должно быть важно) и не смогли найти многого. Библиотеки GUI в целом очень запугивают, просто потому, что каждый класс имеет так много возможных атрибутов. Документация хорошо объясняет, что все делает, но не так хорошо помогает вам понять, что вам нужно.

Я буду динамически собирать графический интерфейс, но я не ожидаю, что это будет трудная часть. Точки налипания для меня прямо сейчас:

  • Как получить текстовые метки, чтобы сами размера автоматически ширины выводимого текста (так, чтобы текст не клип, и я тоже не запас ненужное пространство для них при изменении размера окна)?

  • Как сделать вертикальную полосу прокрутки всегда отображаемой? Установка свойства VScroll (почему это защищено, когда AutoScroll является общедоступным, BTW?), Похоже, ничего не делает.

  • Почему горизонтальная полоса прокрутки не добавляется AutoScroll, когда содержимое выложено вертикально (через Dock = DockStyle.Top)? Я могу использовать минимальный размер для панелей, чтобы предотвратить перекрытие метки и соответствующего элемента управления, когда окно сокращается горизонтально, но затем полоса прокрутки не появляется, а элемент управления недоступен.

  • Как я могу установить ограничения на изменение размера окна (например, установить минимальную ширину), не отключая его полностью? (Просто задайте минимальные/максимальные размеры для формы?) В связи с этим существует ли способ установить минимальную/максимальную ширину или высоту без установки минимального/максимального размера (т. Е. Могу ли я ограничить размер только в одном измерении)?

  • Есть ли встроенный элемент управления, подходящий для редактирования в формате hex, или мне придется что-то самостоятельно строить?

... И я должен использовать что-то еще, что я слышал, WPF упоминалось, но я понимаю, что это связано с XML, и я действительно хочу, чтобы построить GUI из XML (возможно, что-то более способный?) - Я уже имеют данные в графе объектов и делают какую-то странную псевдо-сериализацию XML (в Python, не менее!), чтобы создать графический интерфейс, кажется невероятно крутым.

+0

Вам не нужно использовать XAML при выполнении WPF, это упрощает работу. Книга Петцольда WPF даже не приближается к XAML до второй половины, например. –

ответ

0

В итоге я использовал 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 предположительно связано с я не знаю, почему 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 s в Grid.ColumnDefinitions). Я установил «метку» вверх в столбце 0, а виджет «значение» (поле со списком, кнопка, что угодно) в столбце 1 с HorizontalAlignmentRight.

Я еще не установил вложенные панели, но, похоже, это не должно быть сложно. Я уже играл с системой для подключения событий к кнопкам.

0

Если вы хотите использовать Java/Swing, эта базовая форма должна быть довольно простой. Я хотел бы сказать, что Netbeans IDE имеет довольно хороший редактор WYSIWYG GUI. Несмотря на то, что это довольно хорошо, я бы солгал, если бы сказал, что это все, что нужно. Вы должны понимать Свинг, чтобы все было так, как вы хотите, или вы будете бить головой о стену. Это бесплатно. Большинство запросов, которые вы запрашиваете, являются свойствами GUI-конструктора, вам нужно, по крайней мере, посмотреть, прежде чем задавать специфику.

У меня было очень мало опыта работы с Visual Basic, что-то о языке усугубило меня, но нет ничего, что я мог бы легче пропустить с помощью простого графического интерфейса.

+0

Я хотел бы придерживаться платформы .NET, если это возможно, но мой вопрос на самом деле языковой агностик - я хочу найти ** библиотеку **, которая может это сделать, и выяснить, как сделать так, как описано выше , –

+0

Свинг более чем способен на эти вещи. Другой вариант - это веб-интерфейс. Опять же, возможно, еще проще получить форму, которая выглядит менее похожей на то, что вы продемонстрировали. Пока это приложение для интрасети, это имеет смысл. Тогда jQuery будет отличной библиотекой. – Quaternion

+2

Java GUI сильно оскорблены. OP ясно, что если предпочитает .net. Я не уверен, что IronPython, несмотря на это, является идеальным выбором для работы с графическим интерфейсом. Это должно быть тривиально делать в C# и WinForms с помощью конструктора форм Visual Studio. –

Смежные вопросы