Как мне сделать графический интерфейс, который ведет себя так? - PullRequest
1 голос
/ 31 декабря 2010

Это трудно объяснить без иллюстрации, поэтому - вот иллюстрация, скомбинированная из скриншотов нескольких примеров hello-world и множества работ Paint:

GUI mockup

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

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 11 января 2011

Я закончил тем, что использовал 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.

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

0 голосов
/ 31 декабря 2010

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

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

...