Как создать оболочку для программы

Для тех кто не в курсе, GUI (Graphical user interface) — графический интерфейс пользователя. То есть это интерфейс в котором элементы управления представлены в виде изображений, анимации и так далее. Но существуют программы, которые не используют GUI. Обычно их называют «консольные приложения».

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

Заинтересованных прошу под кат.

И так, для начала напишем маленький класс, со статистической функцией, которая будет запускать наше приложение. Я буду использовать Visual Studio 2010, C# и .NET 4.0. Создадим отдельный файл и в нем напишем каркас класса.

using System; namespace jLibrary < static class EXEStarter < static public void Start(); >>

В .NET есть классы для запуска *.exe файлов. Что бы их использовать, необходимо подключить пространство имен System.Diagnostics. Допишем в начало файла:

Как быстро сделать графический интерфейс на Python


using System.Diagnostics;

Для запуска любого *.exe файла я использовал класс Process. Простой запуск *.exe файла можно сделать так:

static public void Start(string filename) < using (Process MyProc = new Process()) < MyProc.StartInfo.FileName = filename; MyProc.Start(); >>

Что произойдет во время MyProc.Start()? Наша программа запустит *.exe файл указанный в filename, и продолжит выполнение. Есть и другие варианты, но я использовал такой, так как далее, с помощью свойства StartInfo удобно задавать другие параметры запуска.

А что если нужно, что бы управляющая программа(программа которая запускает) дождалась завершения запускаемой программы? Для этого есть метод у класса Process, который называется WaitForExit. Он не возвращает управление, пока запущенное приложение не завершиться. Его недостаток проявиться, если запущенное приложение зависнет — из-за него зависнет управляющая программа, или поток который ее запустил в случае использования многопоточности. WaitForExit можно использовать после вызова Start, например вот так:

static public void Start(string filename) < using (Process MyProc = new Process()) < MyProc.StartInfo.FileName = filename; MyProc.Start(); MyProc.WaitForExit(); >>

Для удобства, необходимо изменить метод Start нашего класса EXEStarter так, что бы программист мог сам задать «ждать завершение процесса или нет». Это совсем не трудно:

static public void Start(string filename, bool waitforexit) < using (Process MyProc = new Process()) < MyProc.StartInfo.FileName = filename; MyProc.Start(); if (waitforexit) MyProc.WaitForExit(); >>

Как видно из фрагмента кода, если waitforexit равно true, значит метод будет ждать завершения процесса, ну и наоборот. Идем дальше. Для задания параметров консольному приложению, нам нужно использовать аргументы командной строки. У свойства StartInfo класса Process, есть свойство Arguments, которое принимает строку содержащую все аргументы командной строки, для этого приложения. снова допишем наш метод Start.

Кратко про Python Tkinter | Как создавать GUI Приложения


static public void Start(string filename, string arguments, bool waitforexit) < using (Process MyProc = new Process()) < MyProc.StartInfo.FileName = filename; MyProc.StartInfo.Arguments = arguments; MyProc.Start(); if (waitforexit) MyProc.WaitForExit(); >>

Неплохо было бы еще скрыть окно, которое открывается при запуске приложения, так как оно не несет никакой полезной нагрузки в данном случае. Для этого в StartInfo есть булевое свойство CreateNoWindow. Как вы уже догадались, если присвоить ему true — окно открываться не будет. Добавим перед запуском приложения строчку:

MyProc.StartInfo.CreateNoWindow = true;

Теперь консольное окошко не будет открываться. Можно так же добавить строку:

MyProc.StartInfo.UseShellExecute = false;

Свойство UseShellExecute как вы уже догадались булевое и отвечает за то, будет ли при запуске использоваться оболочка ОС. Если поставить его в true, то можно в FileName задать не только *.exe файл, а и любой другой, или даже ссылку, при этом будет запущенно приложение, которое установлено по умолчанию в ОС для этого типа файлов.

Читайте также:
Как установить программу Госуслуги

Опять для удобства, можно перегрузить метод Start нашего класса, что бы он мог принимать меньше аргументов. Например вот так:

static public void Start(string filename, bool waitforexit) < Start(filename, «», waitforexit); >static public void Start(string filename)

Работа с аргументами командной строки все еще остается не очень удобной. Я решил написать маленький класс, который стал бы для меня удобным средством создания аргументов командной строки. Из чего состоит аргумент командной строки? Из имени и значения. Обычно это выглядит например так: «-t 60», то есть «-t» имя, а «60» — значения.

Много аргументов могут не принимать значения. Начнем написание класса.

class ComandLineArgument < public string Name < get; set; >public string Value < get; set; >>

Но в таком состоянии это не класс, а лишний код. Добавим метод ToString. Кстати, очень часто консольные утилиты в качестве аргументом принимают путь к какому-либо файлу. Если в этом пути есть пробелы, нужно ставить кавычки.

Необходимо это учесть.

class ComandLineArgument < public string Name < get; set; >public string Value < get; set; >public override string ToString() < string result = Name; if (Value != null) result += » «» + Value + «»»; return result; >>

Я перегрузил метод ToString, который достался классу от Object. Если Value существует, добавляю кавычки и возвращаю строку. Допишем ему еще 2 конструктора, один принимает только имя, другой имя и значение.

public ComandLineArgument(string name) < this.Name = name; >public ComandLineArgument(string name, string value)

Теперь класс закончен. Но его все равно будет не достаточно, ведь для добавления 10 аргументов в запуск *.exe придется создать 10 объектов этого класса и для каждого вызвать ToString. Напишем еще один класс на основе List из System.Collections.Generic. Вот что у меня получилось:

class ComandLineArgumentsList : List < public override string ToString() < string result = string.Empty; foreach (ComandLineArgument arg in this) result += arg.ToString() + ‘ ‘; return result; >>

Методы List будут служить для добавления элементов, а перегруженный ToString вернет правильную строку с пробелами.

С классами все. Напишем маленький пример, что бы понять, как это работает. Для примера я использовал архиватор 7zip. Что бы за архивировать файл необходимо выполнить следующую команду:

%7zip Path% a %Output Path% %Input Path%

Простая форма Упаковщика

Где %7zip Path% — путь к 7z.exe, «a» — опция, которая означает добавления файлов в архив, %Output Path% — путь результата, %Input Path% — путь для входного файла. Список всех аргументов командной строки для 7zip вы можете получит, запустив 7zip через консоль. Я создал небольшую форму с помощью WinForms. Поместил на нее 1 кнопку.

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

using System; using System.Windows.Forms; using jLibrary; namespace _7z_GUI < public partial class formMain : Form < public formMain() < InitializeComponent(); >private void btnPack_Click(object sender, EventArgs e) < string _7zPath; //путь к 7z.exe string InPath; //путь к исходному файлу string OutPath; //путь к результату OpenFileDialog ofd = new OpenFileDialog(); //объект диалога выбора файлов ofd.Title = «Выберите 7z.exe»; //заголовок окна диалога ofd.ShowDialog(); //показываем диалог _7zPath = ofd.FileName; //присваеваем выбранный путь переменной //аналогично предыдущему ofd.Title = «Выберите исходный файл»; ofd.ShowDialog(); InPath = ofd.FileName; //аналогично предыдущему, только используется SaveFileDialog SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = «Архив ZIP (*.zip)|*.zip»; //Фильтр файлов sfd.ShowDialog(); OutPath = sfd.FileName; //создаем список аргументов ComandLineArgumentsList args = new ComandLineArgumentsList(); args.Add(new ComandLineArgument(«a»)); //первый аргумент args.Add(new ComandLineArgument(«»» + OutPath + «»»)); //путь к исходному файлу args.Add(new ComandLineArgument(«»» + InPath + «»»)); //путь к архиву EXEStarter.Start(_7zPath, args.ToString(), true); //запускаем 7z.exe >> >

Вот собственно и все. Задавайте свои ответы. Пишите пожелания, критику и сообщайте о моих орфографических ошибках.

Читайте также:
Как запустить программу через git bash

Похожие записи:

  1. Работа с hex значениями в C#
  2. Работа с реестром Windows, используя C# (.NET)
  3. Указатели в C/C++ для новичков (Часть 2)
  4. Многопоточные приложения в C# для чайников

Источник: jakeroid.com

Создание в Python приложения с графическим интерфейсом

Python это один из самых популярных языков программирования, в основном на нем пишут серверную часть сайтов и приложений. Но создать на нем программу с графическим интерфейсом не сложно. Для этих целей нужно воспользоваться специальной библиотекой. Их несколько, но выделить можно только Tkinter, wxPython, PySimpleGUI и PyQT.

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

Если только начинаете изучать Python следующие статьи будут вам очень полезны.

Программа на Python с графическим интерфейсом

Запускаем Python и создадим новый файл, для этого заходим в «File» и выбираем «New File».

Python графический интерфейс

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

#Вызываем графическую библиотеку

import tkinter as tk

#Создаем функцию для вывода текста

def add_lable():
lable = tk.Label(win, text = ‘Не так сильно ))) ‘)
lable.pack()

#Создаем окно приложения

win = tk.Tk()
win.title(‘Приложение’)
win.geometry(«500×600+100+200»)
win.minsize(300,400)
win.maxsize(300,400)
win.resizable(True,True)

#Добавляем кнопку

btn = tk.Button(win, text=»Нажми на МЕНЯ «,
command=add_lable
)
btn.pack()
win.mainloop()

Создание в Python приложение с графическим интерфейсом

Остается только запустить написанный код нажав F5 либо через меню «Run», предварительно нужно только сохранить данный файл.

Python как сделать программу с графическим интерфейсом

Вот таким образом можно написать приложение на Python с графическим интерфейсом, это всего лишь один из вариантов.

Источник: sibsisadmin.ru

Python PyQt5: современные графические интерфейсы для Windows, MacOS и Linux

Python PyQt5: современные графические интерфейсы для Windows, MacOS и Linux

Python регулярно включают в разнообразные рейтинги лучших языков программирования благодаря большому сообществу и легко читаемому синтаксису. Более того, Python под силу создать современный графический пользовательский интерфейс — GUI — для обычных скриптов. В руководстве уделим внимание модулю для разработки GUI PyQt5 , но стоит также упомянуть аналоги: Tkinter и WxWidget .

Статья подойдет в том числе и начинающим программистам, поэтому, не теряя времени, приступаем!

Содержание руководства:

1. Установка и настройка PyQt5

Скачайте и установите последнюю версию Python для вашей системы, а если Python уже на месте, то установите пакеты при помощи следующей команды (откройте командную строку, введите и нажмите Enter):

pip install pyqt5

2. Основы PyQt5

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

# Построение Windows GUI import sys from PyQt5 import QtWidgets from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel def main(): app = QApplication(sys.argv) win = QMainWindow() win.setGeometry(400,400,400,300) win.setWindowTitle(«Pyqt5 Tutorial») win.show() sys.exit(app.exec_()) main()

Результат выполнения программы:

Теперь разберем код окна интерфейса с заголовком сверху. Если обсуждать кратко, то в первую очередь импортируем PyQt5 и его классы, полезные в создании виджета GUI, а затем создаем функцию main() для реализации оконного интерфейса.

  • QMainWindow() — словно контейнер, содержащий все виджеты, такие как кнопки, текст, поле ввода и т. д.
  • SetGeometry() — один из методов QMainWindow() , устанавливает размер окна. Синтаксис: setGeometry(x, y, длина, ширина) .
  • SetWindowTitle() — устанавливает заголовок окна.
  • Win.show() — создает и отображает весь разработанный интерфейс.
  • Sys.exit(app.exec_()) — устанавливает, что конкретное окно не закроется без нажатия на кнопку с крестиком. Без этой строчки кода GUI-программа завершится через секунду после выполнения.

Label Text — это текст, отображаемый внутри окна. С написанием Label Text в PyQt5 вам поможет виджет Qlabel .

Выполните следующий код:

import sys from PyQt5 import QtWidgets from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel def main(): app = QApplication(sys.argv) win = QMainWindow() win.setGeometry(400,400,400,300) win.setWindowTitle(«Pyqt5 Tutorial») #Label Text label= QLabel(win) label.setText(«Hi this is Pyqt5») label.move(100,100) win.show() sys.exit(app.exec_()) main()

Читайте также:
Программа для сведения фотографий

Результат выполнения программы:

Если кратко, то вызываем метод Qlabel() и передаем в него переменную QMainWindow .

  • Метод SetText() устанавливает Label Text, в качестве аргумента принимает только строковые данные.
  • Метод Move(x, y) применяется для установки положения Label Text внутри окна.

4. События и кнопки

Кнопки — важная часть любого программного обеспечения, ведь именно кнопка определяет действие пользователя, а следовательно, и результат работы программы тоже. Для создания кнопок в PyQt5 придётся применить другой виджет под названием QtWidgets , выполните следующий код:

import sys from PyQt5 import QtWidgets from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel def main(): app = QApplication(sys.argv) win = QMainWindow() win.setGeometry(400,400,400,300) win.setWindowTitle(«Pyqt5 Tutorial») #Button button = QtWidgets.QPushButton(win) button.setText(«Hi! Click Me») button.move(100,100) win.show() sys.exit(app.exec_()) main()

Результат выполнения программы:

В коде вышеизложенного примера переменная QMainWindow передается в метод из Qwidget под названием QPushbutton . Далее разберем код примера по пунктам.

  • SetText() устанавливает название для кнопки, как можно увидеть на приведенном выше изображении.
  • Move() снова применяется для установки положения кнопки в окне по координатам на осях x и y.

Теперь пришел черед событийно-ориентированного программирования (Event-Driven-Programming)! Проще говоря, нужно определить действие для кнопки, то есть, если пользователь на нее нажмет, то что-то должно произойти. Ознакомьтесь со следующим кодом, а дальше рассмотрим подробные объяснения:

import sys from PyQt5 import QtWidgets from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel def click(): print(«Hy Button is clicked!») def main(): app = QApplication(sys.argv) win = QMainWindow() win.setGeometry(400,400,400,300) win.setWindowTitle(«Pyqt5 Tutorial») #Button Click button = QtWidgets.QPushButton(win) button.setText(«Hi! Click Me») button.move(100,100) button.clicked.connect(click) win.show() sys.exit(app.exec_()) main()

Теперь в примере определяется не только главная функция по имени main() , но и функция по имени click() , передающаяся в качестве параметра для button.clicked.connect() в main() . Таким образом указывается конкретная функция, срабатывающая при нажатии на конкретную кнопку.

Запустив такой код и нажав на кнопку, вы увидите вывод на экране консоли. Дело за вами, что же написать внутри функции click() ! Протестируйте код на вашей операционной системе.

5. Поля ввода

Поля ввода также называются текстовыми полями — это области для пользовательского ввода информации. Для объявления поля ввода в PyQt5 применяется специальный виджет QlineEdit() , а в него, как обычно, передается в качестве параметра QMainWindow .

Посмотрите на следующий код и обратите внимание на его результат:

import sys from PyQt5 import QtWidgets from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel def main(): app = QApplication(sys.argv) win = QMainWindow() win.setGeometry(400,400,400,300) win.setWindowTitle(«Pyqt5 Tutorial») #Entry Box / Text Box textbox = QtWidgets.QLineEdit(win) textbox.move(100, 100) textbox.resize(180,40) win.show() sys.exit(app.exec_()) main()

Результат выполнения программы:

  • Resize(width, height) изменяет размер виджета поля ввода.

6. Окна сообщений и всплывающие окна

Окна сообщений и всплывающие окна (popups) — это альтернативные маленькие окна, например, вы создаете программу для регистрации электронной почты, а пользователь не ввел надежный пароль, тогда вы предупреждаете пользователя об этом через окна сообщений.

Для создания окон сообщений в PyQt5 применяется виджет QMessageBox , он опять таки принимает QMainWindow в качестве параметра.

Проанализируйте следующий код:

import sys from PyQt5 import QtWidgets from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel def main(): app = QApplication(sys.argv) win = QMainWindow() win.setGeometry(400,400,400,300) win.setWindowTitle(«Pyqt5 Tutorial») #Message Box msg = QtWidgets.QMessageBox(win) msg.setWindowTitle(«Pyqt5 Alert») msg.setText(«Message box in Pyqt5!») msg.exec_() win.show() sys.exit(app.exec_()) main()

Результат выполнения программы:

  • SetWindowTitle() устанавливает заголовок для окна сообщения.

Также в окне сообщения всегда можно показать специальный значок, как показано в следующем коде и результате его выполнения:

msg = QtWidgets.QMessageBox(win)
msg.setWindowTitle(«Pyqt5 Alert»)
msg.setText(«Message box in Pyqt5!»)
msg.setIcon(QtWidgets.QMessageBox.Critical)
msg.exec_()

Результат выполнения программы:

Ниже приведен список допустимых для окон сообщений значков:

  • QMessageBox.Warning
  • QMessageBox.Critical
  • QMessageBox.Information
  • QMessageBox.Question

Выводы

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

  • Пусть говорят… расходящиеся гистограммы!
  • 5 способов выйти из вложенного цикла в Python
  • Осваиваем веб-скрэпинг на Python

Источник: nuancesprog.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru