Как создать графический интерфейс поверх Python APP, чтобы он мог выполнять графический интерфейс или интерфейс командной строки?

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

Я предполагаю, что будет больше кода, но есть ли простой способ обнаружить что-то вроде GTK, поэтому он применил только код, когда присутствовал GTK?

Кроме того, создание GUI в Python в целом: лучше ли сохранять код GUI как мало GUI и использовать что-то вроде XML-подхода GTK (используя функцию gtk.glade.XML ())? Существуют ли другие инструментальные средства GUI, которые имеют аналогичный подход к подходу Glade / XML / «Explode in Code»?

Спасибо за любой совет.

Энди

есть ли простой способ обнаружить что-то вроде GTK, поэтому он применил только код, когда присутствовал GTK?

Во-первых, отмените свое приложение на 3 отдельных модуля.

  1. Фактическая работа: foo_core.py .

  2. Модуль CLI, который импортирует foo_core . Назовите его foo_cli.py .

  3. Модуль GUI, который импортирует foo_core . Назовите это foo_gui.pyw .

Модуль foo_cli выглядит следующим образом.

 import foo_core import optparse def main(): # parse the command-line options # the real work is done by foo_core if __name__ == "__main__": main() 

Модуль foo_gui может выглядеть следующим образом.

  import foo_core import gtk # or whatever def main() # build the GUI # real work is done by foo_core under control of the GUI if __name__ == "__main__": main() 

Этого достаточно. Людям можно доверять самим решать, хотят ли они CLI или GUI.

Если вы хотите запутать людей, вы можете написать скрипт foo.py который сделает что-то вроде следующего.

 try: import foo_gui foo_gui.main() except ImportError: import foo_cli foo_cli.main() 

Это зависит от того, какое именно взаимодействие вы хотите.

Если вам нужен реальный графический интерфейс, вы можете использовать шаблон смиренного диалога , чтобы отделить элементы GUI от логики программы и использовать текстовый «GUI» для обработки CLI. Это также имеет приятный побочный эффект, что большие части графического интерфейса можно программировать с возможностью тестирования.

Другим способом является назначение sys.stdin и sys.stout собственными объектами, которые перенаправляют ваши программы IO в GUI (это не работает с библиотеками, отличными от python). Это означает, что у вас меньше возможностей взаимодействия в графическом интерфейсе, но гораздо меньше усилий по программированию.

Я не рекомендую делать графический интерфейс в XML. Весь XML-код дает вам мини-язык для описания макета. Зачем использовать мини-язык, когда вы можете полностью использовать питон?

Что касается обнаружения GTK, я бы не предложил этого. Вместо этого добавьте аргумент командной строки, чтобы определить, следует ли создавать графический интерфейс или нет (например: myprogram -g). Затем становится проще создавать ярлык на рабочем столе или псевдонимы командной строки для запуска в режиме графического интерфейса пользователя, при этом все еще можно использовать инструмент командной строки с любого терминала.

Тем не менее, вы хотите, чтобы код GUI был отделен от битов, которые выполняют настоящую работу. Предоставьте себе класс, который содержит всю бизнес-логику, а затем GUI и CLI получают доступ к этому объекту для выполнения работы.

Что я делаю, так это то, что у меня есть один и только сценарий bash со следующим:

 if [ "${0}" == "mcm" ]; then /usr/bin/python ${inst_dir}/terminal/mcm-terminal.py ${@} else /usr/bin/python ${inst_dir}/gtk/mcm-gtk.py & fi 

Затем я создаю две символические ссылки: / usr / sbin / mcm и / usr / bin / mcm-gtk

Работает очень хорошо.