Подтвердить что ты не робот

Как изменить графический интерфейс для существующей программы на C?

Я работаю над проектом портирования старой программы CLI Solaris для работы в Linux и с закрытием некоторых несвязанных аппаратных проблем. Теперь я хочу использовать графический интерфейс, поэтому пользователь может выбирать между различными опциями с раскрывающимися списками и флажками, а также некоторые области ввода текста для не ограниченных параметров, таких как имя файла. (Программа является внутренним инструментом для запуска некоторых спектросканеров и сохранения результатов в виде файлов CSV. Он обрабатывает все эти параметры, запускает сканеры и обрабатывает информацию и сохраняет ее с указанным именем файла, я просто хочу, чтобы что-то было лучше использовать, чем CL. )

Единственный раз, когда я видел что-то вроде этого, был PyGTK + GUI с привязками python для кода C (я думаю, что это было, это был мой первый семестровый кооператив, и я не очень понял!). Это немного больше, чем я хочу сейчас; есть ли относительно простой способ сделать это? Когда я googled, я нашел SWIG (http://www.swig.org/index.php); это хороший способ пойти?

4b9b3361

Ответ 1

Это похоже на работу Tcl/Tk. Он имеет очень простой API C, который позволяет вам регистрировать команды с обратным вызовом. Если вы используете эту команду в программе Tcl, она вызовет обратный вызов и предоставит механизм для преобразования аргументов между списком Tcl (собственная структура данных) и массивом стиля ARGV char *.

Он был разработан специально для того, чтобы легко модифицировать эту оболочку для программ C с командной строкой. Существует также множество других режимов, которые вы можете использовать для взаимодействия с интерпретатором, и его легко внедрить в программы в качестве языка сценариев. Из памяти доступны доступные интерфейсные механизмы:

  • Зарегистрировать команды в Tcl переводчик
  • Вставить интерпретатор Tcl в свой программы и использовать Tcl в качестве встроенного язык сценариев (возможно, включая регистрацию команд и обратных вызовов на ваш программа)
  • Создайте процесс с полнодуплексным трубой и отправьте команды через stdin/stdout (вы также можете прикрепить обработчик события к трубе, которая вызывается, когда доступны данные)
  • Меньше специфичных для Tcl механизмов, таких как fork/exec или соединение через сокеты.

Ousterhout book Tcl и TK Toolkit немного устарели, но имеют хорошее руководство по API C. Welch Практическое программирование в Tcl/Tk - это другая классическая книга Tcl/Tk и обновляется чаще. Есть также несколько других книг и довольно много электронных ресурсов в Интернете. Хорошими отправными точками являются: Tcl учебник, учебник по ТК, сайт защиты Tcl (возможно, стоит посмотреть, чтобы помочь вам решить, хотите ли вы пойти по этому маршруту), Tcl/Tk Wiki и, конечно, fooobar.com/questions/tagged/....

TK предоставит вам простой графический интерфейс и очень легко научиться программировать - если немного упрощен. Это не как некрасиво, как раньше, если вы потратите некоторое время на изменить внешний вид или использовать тематику двигатель, такой как Плитка.

Как отмечает Норман Рэмси (+1), другой альтернативой с простым C API является Lua. Оба имеют преимущества и недостатки. Основными преимуществами Tcl являются простой и чисто интегрированный инструментарий TK и хорошая, зрелая поддержка поддержки от сторонних библиотек (например, Tix). Основная сила Lua заключается в том, что язык намного приятнее, но нет стандартного инструментария GUI, поэтому пользовательский интерфейс не так хорошо интегрирован. Lua также имеет гораздо лучшую поддержку для нарезки в интерпретаторе, который был разработан для этого с нуля. Однако, если вы завершаете устаревшее приложение C/unix, это вряд ли будет важной функцией.

WXWidgets значительно сложнее, чем TK, и имеет больше времени работы, но имеет более богатый набор функций.

Если у вас есть настоящая причина думать, что ваш проект сценариев будет расширяться в большее приложение, вы можете рассмотреть Lua. Однако в более крупном масштабе вы входите в существенный проект разработки и Python или Ruby начинают становиться жизнеспособными. По мере того, как проект становится более крупным, C-кодовая база будет представлять собой меньшую часть общего проекта, а поддержка сторонней библиотеки будет более важным.

Если вы поедете с Tcl и узнаете, что ваш проект получает свою собственную жизнь, подумайте о внедрении интерпретатора Tcl и повторного применения приложения в качестве API-интерфейса плагина, в который люди могут подключить свои собственные скрипты. Дополнительные функции могут быть выполнены в виде скриптов и, возможно, сфотографированы третьим лицам для обслуживания. Одним из преимуществ системы со встроенным языком сценариев является то, что вы лично не обязательно должны реализовывать функции. Люди могут писать свои собственные расширения на языке сценариев или получать третьи стороны, чтобы сделать это для них.

SWIG предназначен для создания оберток вокруг библиотек. Он анализирует файлы заголовков и генерирует слой клея, который представляет собственный API на целевом языке. Чтобы использовать его, вам придется перегруппировать вашу программу в библиотеку.

Ответ 2

Как говорили другие, Tcl/Tk - хороший выбор. Существует реальный риск , который вы перерастите язык Tcl, но этот риск смягчается превосходной силой и простотой инструментария для создания окон Tk.

Другим выбором, который я бы рассмотрел, является wxlua. Причины этого в том, что Lua - это язык, который вы не перерастуте. Вы также можете предпочесть wxlua, потому что он основан на wxwidgets, который даст вам GUI собственный внешний вид. Оригинальный Tk имел довольно странный и очень неестественный внешний вид, но теперь все намного лучше, поэтому эта причина может нести большую силу. Вы можете просмотреть два инструментария GUI, чтобы узнать, какие призывы. Последней причиной, по которой вы можете предпочесть Lua, является то, что легче предоставить пользовательские типы данных для графического интерфейса и сценариев.

Я бы не рассматривал альтернативы, такие как Python и Gtk +, из-за всех альтернатив там только Tcl и Lua были разработаны с самого начала, чтобы выйти замуж за C-программы.

Вы также спросите о SWIG. Хотя это поверхностно привлекательно, я рекомендую избегать этого. У Tcl и Lua есть очень простые C API, и вы узнаете больше, понимаете лучше и будете лучше контролировать свое приложение, если вы научитесь самостоятельно использовать собственный API. наличия SWIG-кода для вас.

Ответ 3

Я использовал tcl/tk для упаковки небольших программ CLI раньше, и он часто отлично работает, чтобы начать с.

tcl/tk - это язык/пакет script, который будет вызывать и анализировать вывод CLI, поэтому вам не нужно писать новую программу

tcl/tk

Ответ 4

Как насчет Tcl/Tk.. много ресурсов.. например this

Ответ 5

У меня есть второй Tcl/Tk. Я сделал то же самое для старых программ, написанных на языке Fortran/C/С++. Поскольку очень сложно писать DSL в Tcl/Tk, я просто добавил параметр для вывода на экран DSL (по существу, команд Tcl, написанных в procs) для программы tk для eval. Я сделал это для программы, выполняющей довольно сложные анимации графа на холсте tk, который имеет опции для сохранения части анимации в mpeg примерно за 4 часа. Люди были поражены. Он полностью переносится. Tcl/Tk имеет простые, но сложные функции, ориентированные на события (которые по-прежнему не имеют себе равных по своей простоте) для написания графических приложений. Вы можете использовать простой канал для взаимодействия с устаревшими программами, если он может читать со стандартного ввода и записывать в стандартный вывод.

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

И что около 10 лет назад. С тех пор Tk значительно улучшилась/улучшилась и приобрела естественный внешний вид.

Основным недостатком, используемым для упаковки стандартных программ Tcl/Tk, которые в значительной степени решаются и сейчас.

EDIT: DSL означает "Язык, специфичный для домена" Расширения для интерпретатора Tcl проявляют себя как новый язык ключевые слова. Tcl имеет довольно простой синтаксис, поэтому этот механизм позволяет довольно много возможностей для расширения языка. Хорошим примером приложения, которое делает это с Tcl, является Expect.

Ответ 6

Поскольку вы уже знакомы с PyGTK, почему бы не использовать Gtk +? В конце концов, PyGTK - это просто привязки вокруг Gtk +, которые написаны на C.

Его кросс-платформенный тоже. Поэтому, если вы используете GLib, ваше приложение будет работать практически в любом месте.

Ответ 7

Любой инструментарий или фреймворк может решить вашу проблему, поскольку вы запрашиваете пользовательский интерфейс, который действует как оболочка для исполняемого файла командной строки. Вы можете выбрать С#, MFC, VB6, любой инструмент, который вы хотите. Языки .NET, такие как С#, довольно просты для оболочек интерфейса командной строки. wxWidgets, Qt или Ultimate ++ могут помочь вам, если вы хотите сделать это на С++.

Если вы знаете, как программировать на C, вы можете сделать это в обычном API Win32, хотя вы должны управлять некоторыми вещами, которые обрабатываются автоматически в рамках С++.

Ответ 8

Я думаю, MGUI - это то, с чем вы можете пойти!

MGui (графический пользовательский интерфейс MORELLO) - это кросс-платформенный графический интерфейс пользователя, написанный на ANSI C, также предоставляющий С++ API через библиотеку фреймов. Он состоит из библиотеки, включая все типичные объекты GUI, как меню, кнопки, редактируемые поля, списки и т.д.... и инструмент генерации кода (MGui Designer), который позволяет пользователю создавать и поддерживать макеты окон приложений с помощью мыши.

MGui позволяет создавать приложения для Windows 3.1, Windows 95/98/NT, Unix X-Window, DOS (Borland, Watcom и DJGPP) без каких-либо знаний о графическом интерфейсе хост-системы. Вы можете просто использовать генератор кода MGui Designer для создания макетов окон и написать свой код для взаимодействия с созданными объектами.

Для своих функций MGui полезен для всех, кто хочет реализовать многоплатформенные приложения, без каких-либо требований к переносу графического интерфейса. Он идеально подходит для использования в встроенных системах на основе DOS как в реальном режиме, так и в DPMI.

Кстати, здесь - очень хороший список libs.

Ответ 9

Вы можете использовать любой инструментарий, который вам нравится (tcl/tk или любой другой язык сценариев, который вам удобен, с возможностью графического интерфейса), но совет по сохранению оригинала в качестве программы CLI (который затем запускает GUI после сбора параметров от пользователя). Нет необходимости входить в C-привязки и т.д.

Ответ 10

Если вам нужен текстовый интерфейс в вашей программе, TxWin является хорошим вариантом.

Другой, TVision клон gool ol 'Borland TurboVision.

Ответ 11

Не вдаваясь в рекомендации по конкретным библиотекам или инструментам GUI, имейте в виду, что большинство графических интерфейсов работают с "управляемой событием" моделью.

Это означает, что большую часть времени приложение делает что-то вроде этого:

  • ожидание события (например, ввод клавиатуры, истечение таймера и т.д.)
  • вызов определенной пользователем функции на основе этого события
  • вернитесь к шагу 1.

Если функция, которая вызывается, занимает значительное количество времени, она делает вашу программу неактивной.

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