На чем писать gui
Перейти к содержимому

На чем писать gui

  • автор:

Разработка пользовательского интерфейса: принципы

И 10 советов по проверке любого интерфейса на дружелюбие к пользователю.

Сергей Ломакин

Дата публикации: 1 мар 2023

Разработка пользовательского интерфейса: принципы

Сергей Ломакин Редакция «Текстерры»

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

Какие существуют инструменты для разработки GUI десктопных приложений? [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.

Закрыт 4 года назад .

Как и с помощью каких инструментов разрабатываются gui десктопных приложений? Сам являюсь web-разработчиком, и в вебе gui привязывается к front-end, и пишется на html, css, js. А что используется при разработке gui десктопных приложений? И как построен сам процесс?

Отслеживать
задан 30 авг 2019 в 19:49
Василий Пупкин Василий Пупкин
73 1 1 серебряный знак 11 11 бронзовых знаков

Все операционки предоставляют некий API, посредством которого возможно создание гуя. Далее, можно пользоваться голым апи или использовать более высокоуровневые, а то и кросс-платформенные обёртки. List of platform-independent GUI libraries

30 авг 2019 в 19:53

C# и C++ это совсем разные языки и разные подходы к разработке десктопа. На них нельзя дать общий ответ 🙂 Оставьте один тэг

– user177221
30 авг 2019 в 20:54
Возможно, вам как веб-разработчику, стоит посмотреть на Electron
30 авг 2019 в 21:43

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Отвечу только за С++ Есть много вариантов —

QT — https://www.qt.io/ Библиотека для создания кросс-платформенных гуев (поддерживает свой генератор make файла qmake и CMake)

Masking — олдовый вариант (под dos и т.д)

FLTK — https://www.fltk.org/ — по суди обертка над OGL

GTK — https://www.gtk.org/ — конкурент QT работает под X и Wayland

Процесс построен как все процессы разработки на C++ : используем библиотеку которая обеспечивает связь с X или fb и реализуем бизнес-логику приложения

Отслеживать
ответ дан 30 авг 2019 в 20:24
user326165 user326165
github.com/vurtun/nuklear ещё доволно неплоха.
30 авг 2019 в 20:29
30 авг 2019 в 20:40
nuklear сишная же
– user326165
30 авг 2019 в 21:13
что не мешает быть ей неплохой, заметь 🙂
30 авг 2019 в 21:19
это не значит что она плохая) это значит что спрашивали про с++
– user326165
30 авг 2019 в 21:28

Из тех что знаю и в которых работал это Qt и WinForms.

ВЫглядит как то так:

Qt Creator предоставляет средства визуального программирования пользовательского интерефейса (чистый с++). Есть редактор формы, позволяющий располагать на форме элементы (кнопки, лейблы, текстбоксы) и программировать события связанные с ними.

Еще в Qt есть такая фича как QtQuick и собственный язык разметки — QML (думаю это будет для вас ближе). Я в ту степь не лез, подробнее рассказать не могу. Но точно знаю что с помощью того что написал выше тоже можно наклепать GUI.

WinForms это API для разработки пользовательских интерфейсов и является частью .NET. В отличии от Qt не настолько кросс-платформенный и больше подходит для разработки под винду. Средства визуального программирования под WinForms предоставляет Microsoft Visual Studio. Можно писать как на с# так и на CLR/С++(так уже никто не делает). На шарпах достаточно удобно.

Создаём графический интерфейс на Python за 10 минут

Python — язык программирования для решения разных задач: на нём можно как играть в угадайку чисел, так и создавать нейросети.

Но обычно работа с программой на Python идёт через командную строку: она отвечает тебе текстом, ты ей подаёшь на вход текст. Это хорошо, когда программа работает на сервере, но в бытовых ситуациях это не всегда удобно: хочется понажимать на кнопочки.

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

Библиотека PySimpleGUI — простой интерфейс для Python

На самом деле у Python есть много библиотек, которые позволяют создать графический интерфейс — Tkinter, Qt, Remi или WxPython. Но проблема в том, что каждую из них нужно осваивать отдельно. Например, в одной удобно создавать графики, но неудобно — кнопки и надписи.

Чтобы сделать создание интерфейсов проще, придумали PySimpleGUI. Идея в том, чтобы объединить лучшие идеи из каждой библиотеки и написать для них внешнюю обёртку.

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

Ещё PySimpleGUI — это кросс-платформенное решение. Это значит, что интерфейсы, созданные с помощью этой библиотеки, будут работать одинаково на разных операционных системах.

Пара примеров, что можно сделать с PySimpleGUI:

Создаём графический интерфейс на Python за 10 минут Создаём графический интерфейс на Python за 10 минут

Что для этого нужно

Для установки PySimpleGUI в командной строке компьютера или среды разработки пишем такую команду:

pip install pysimplegui

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

import PySimpleGUI as sg

Теперь нам достаточно написать sg вместо pysimplegui.

Если появилось такое сообщение, значит, библиотека установлена и готова к работе

Создаём простой интерфейс

Сегодня мы посмотрим, как всё работает, и сделаем маленькую программу. Как разберёмся — возьмём проекты помасштабнее.

В редакторе кода создаём новый Python-файл и пишем такой код — в нём мы создаём простое окно с кнопкой и текстом:

# подключаем библиотеки import PySimpleGUI as sg import random # что будет внутри окна # первым описываем кнопку и сразу указываем размер шрифта layout = [[sg.Button('Новое число',enable_events=True, key='-FUNCTION-', font='Helvetica 16')], # затем делаем текст [sg.Text('Результат:', size=(25, 1), key='-text-', font='Helvetica 16')]] # рисуем окно window = sg.Window('Генератор случайных чисел', layout, size=(350,100)) # запускаем основной бесконечный цикл while True: # получаем события, произошедшие в окне event, values = window.read() # если нажали на крестик if event in (sg.WIN_CLOSED, 'Exit'): # выходим из цикла break # закрываем окно и освобождаем используемые ресурсы window.close()

За размер окна отвечает параметр size в последней команде

Мы только что создали простой графический интерфейс, указав только три параметра: размер окна, кнопку и текстовое поле. Так как мы не задавали дополнительных параметров, библиотека сама разместила элементы внутри окна. Ещё у нас не прописана внутренняя логика, поэтому при нажатии на кнопку ничего не произойдёт. Исправим это и привяжем нажатие кнопки к появлению нового случайного числа.

Выдаём случайные числа

При создании кнопки мы использовали такой параметр:

Это значит, что при нажатии на кнопку окно отправит внутреннее системное сообщение с текстом -FUNCTION-. Если мы привяжем свою функцию к этому сообщению, то она будет выполняться при каждом нажатии кнопки.

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

# если нажали на кнопку if event == '-FUNCTION-': # запускаем связанную функцию update()

Теперь у нас есть привязанная функция update(), но в коде её ещё нет. Исправим это и добавим новую функцию сразу после команд импорта:

# обрабатываем нажатие на кнопку def update(): # получаем новое случайное число r = random.randint(1,100) # получаем доступ к текстовому элементу text_elem = window['-text-'] # выводим в него текст с новым числом text_elem.update("Результат: <>".format(r))

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

Собираем всё вместе и запускаем программу:

Готовый код

# подключаем библиотеки import PySimpleGUI as sg import random # обрабатываем нажатие на кнопку def update(): # получаем новое случайное число r = random.randint(1,100) # получаем доступ к текстовому элементу text_elem = window['-text-'] # выводим в него текст с новым числом text_elem.update("Результат: <>".format(r)) # что будет внутри окна # первым описываем кнопку и сразу указываем размер шрифта layout = [[sg.Button('Новое число',enable_events=True, key='-FUNCTION-', font='Helvetica 16')], # затем делаем текст [sg.Text('Результат:', size=(25, 1), key='-text-', font='Helvetica 16')]] # рисуем окно window = sg.Window('Генератор случайных чисел', layout, size=(350,100)) # запускаем основной бесконечный цикл while True: # получаем события, произошедшие в окне event, values = window.read() # если нажали на крестик if event in (sg.WIN_CLOSED, 'Exit'): # выходим из цикла break # если нажали на кнопку if event == '-FUNCTION-': # запускаем связанную функцию update() # закрываем окно и освобождаем используемые ресурсы window.close()

Что дальше

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

Любишь Python? Зарабатывай на нём!
Изучите самый модный язык программирования и станьте крутым бэкенд-разработчиком. Старт — бесплатно.

Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём!

Получите ИТ-профессию

В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.

Что выбрать для написания GUI в 2021.

Что лучше выбрать для написания десктопного GUI приложения в 2021 году.

Нужно написать кросплатфоменный интерфейс.

Там должны быть дерево, таблицы (большие, сортировки, группировки, …), формы. Хочется не писать их самостоятельно.

  • C# (WinForms или Avalonia, Gtk), поскольку на c# писал мало, и есть ощущения, что скорость разработки не очень высокая. Сходу полноценных таблиц и деревьев вообще не нашел.
  • Python (PySide6), посмотрел по gui на python. Варианты по сути:
    • PyQt(PySide) 6 версия уже достаточно стабильна ? Документации навскидку не очень много нашел.
    • wxWidgets есть ощущение, что менее мощный. (тут смущает, что будет медленнее C# и опять же GIL).

    В C++ лезть не хочется, так как давно на нем не писал, и есть ощущение, что на нем разработка будет еще медленнее чем на C#.

    Предварительно кажется, что python будет компромисным вариантом.

    Разработчик пока всего один, и не хочется надолго увязать в написании GUI, так как есть и другие задачи.

    У кого какие соображения по данному вопросу ?

    ol1mp ★
    13.07.21 20:14:13 MSK
    Последнее исправление: ol1mp 13.07.21 20:15:10 MSK (всего исправлений: 1)

    1 2 3 →

    Сам спросил — сам ответил. Уносите.

    anonymous
    ( 13.07.21 20:18:29 MSK )

    wxWidgets написаны на c++, сами виджеты не тормозят. GIL при правильной многопоточности (у wxPython свои расширения для этого) ты вообще не заметишь.

    Посмотри ещё таблицы на TkInter — там есть ОЧЕНЬ навороченные решения, и всё буквально летает (для web ui до таких таблиц как до луны раком), в wx таблицы в комплекте хорошие, но для Tk сторонние решения.

    Я для просмотра гигантских pandas таблиц вот это использую:
    https://pandastable.readthedocs.io/en/latest/examples.html — там для таблицы виртуальный буфер, она вообще ракета.

    Думаю, если для группировки/сортировки возьмёшь pandas/numpy и грамотно запроектируешь ui (с буфером), то на python можно будет сделать очень быстрое приложение.

    Для QT и wx есть визуальные форморисовальщики.

    Shadow ★★★★★
    ( 13.07.21 20:19:28 MSK )
    Последнее исправление: Shadow 13.07.21 20:25:32 MSK (всего исправлений: 3)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *