Рубрики
Без рубрики

Краткое вступление к Псимплеги

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Создание графических пользовательских интерфейсов (GUI) может быть сложно. Есть много разных наборов инструментов Python GUI на выбор. Три верхних, которые вы, скорее всего, увидите, наиболее часто являются TKinter, Wxpython и Pyqt (или Pyside2). Однако есть более новый инструментарий под названием Pysimplegui Это направлено на создание GUI проще.

То, как Pysimplegui получает свою силу, является слоем абстракции поверх Tkinter, Wxpython и Pyqt. Вы можете думать о Писамплеуси как обертку. Разработчики за Pysimplegui также недавно добавили 4-й обертку вокруг Remi , который представляет собой «библиотеку GUI для приложений Python, которая транкирует интерфейс приложения в HTML для отображения в веб-браузере».

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

Установка Pysimplegui.

Установка Pysimplegui – это щелчок, если вы знаете, как использовать PIP. Вот команда, которую вы должны запустить:

pip install pysimplegui

Обратите внимание, что это установит Pysimplegui в вашу систему Python. Возможно, вы захотите установить его в виртуальную среду Python. Вы можете использовать Python’s Венв модуль, чтобы сделать это. Проверьте это!

Привет Писибопульги

Когда дело доходит до работы с Guis, всегда проще посмотреть, как вы можете поставить один вместе. Давайте напишите небольшую форму, которая принимает строку и имеет две кнопки: кнопка OK и кнопка «Отмена».

Этот пример основан на одном из Руководство пользователя Pysimplegui :

import PySimpleGUI as sg

# Create some elements
layout = [[sg.Text("What's your name?"), sg.InputText()],
          [sg.Button('OK'), sg.Button('Cancel')]]

# Create the Window
window = sg.Window('Hello PySimpleGUI', layout)

# Create the event loop
while True:
    event, values = window.read()
    if event in (None, 'Cancel'):
        # User closed the Window or hit the Cancel button
        break
    print(f'Event: {event}')
    print(str(values))

window.close()

Здесь вы импортируете Pysimplegui, а затем создаете серию виджетов, которые известны как «элементы» в PysimpleGui: Текст , IPPUTTEXT и два Кнопки Отказ Чтобы расположить элементы в рядах, вы можете добавить их в список. Таким образом, для первого ряда элементов вы создаете список, содержащий текстовый элемент, за которым следует элемент ввода текста. Элементы добавляются из левой вправо горизонтально. Чтобы добавить второй ряд, вы добавляете второй список элементов, которые содержат две кнопки.

После того, как у вас есть все ваши элементы в вложенном наборе списков, вы можете создать Окно Отказ Это родительский элемент, который содержит все другие элементы. Он имеет заголовок и принимает ваш вложенный список элементов.

Наконец вы создаете в то время как петля и позвонить в окно Читать () Способ извлечения событий и значений, которые пользователь установил. Если пользователь нажимает кнопку «Отмена» или закрывает окно, вы ловите это и вырваться из цикла. В противном случае вы распечатаете событие и любое значение, которое пользователь ввел.

Это то, что GUI должен выглядеть, когда вы запускаете свой код:

Допустим, вы вводите строку «Майк» в виджете ввода текста, а затем нажмите кнопку ОК. Вы должны увидеть следующий вывод в вашем терминале:

Событие: ОК {0: ‘Mike’}

Не было бы неплохо, если бы вы могли перенаправить stdout к окну отладки в вашем графике? Pysimplegui на самом деле имеет простой способ сделать это. Все, что вам нужно сделать, это обновить оператор печати в коде выше следующим:

sg.Print(f'Event: {event}')
sg.Print(str(values))

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

Элементы Pysimplegui

Не хватает времени, чтобы перейти на каждый элемент, который поддерживает Pysimplegui. Однако вы можете увидеть, какие элементы поддерживаются, собираясь на Эта часть документации Отказ Есть Примечание В документации, который упоминает, что виджет таблицы в настоящее время имеет проблемы. Подразумевается, что виджет дерева также проблематичен, но на самом деле не говорит о том, почему.

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

Обновить : После разговора с сопровождающим пакета мне сказали, что таблица и элементы дерева на самом деле работают довольно хорошо.

Создание нескольких окон

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

Для краткости я покажу только, как сделать два активных окна:

import PySimpleGUI as sg

# Create some Elements
ok_btn = sg.Button('Open Second Window')
cancel_btn = sg.Button('Cancel')
layout = [[ok_btn, cancel_btn]]

# Create the first Window
window = sg.Window('Window 1', layout)

win2_active = False

# Create the event loop
while True:
    event1, values1 = window.read(timeout=100)

    if event1 in (None, 'Cancel'):
        # User closed the Window or hit the Cancel button
        break

    if not win2_active and event1 == 'Open Second Window':
        win2_active = True
        layout2 = [[sg.Text('Window 2')],
                   [sg.Button('Exit')]]

        window2 = sg.Window('Window 2', layout2)

    if win2_active:
        events2, values2 = window2.Read(timeout=100)
        if events2 is None or events2 == 'Exit':
            win2_active  = False
            window2.close()

window.close()

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

Затем вы установили флаг, Win2_active , чтобы ложь, а затем начните свой «контур событий». Внутри контура событий вы проверяете, если пользователь нажал кнопку «Открыть второе окно». Если у них есть, то вы открываете второе окно и следите за своими событиями.

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

Обертывание

Pysimplegui – это аккуратная библиотека, и мне нравится, что она пытается быть немного больше «питонкой», чем Wxpython, и Pyqt, как правило, являются. Конечно, если вы ищете другой инструментарий GUI, который использует больше Pythonic подход против подхода C ++, который использует PYQT и WXPYPHON, вы можете проверить Тога или Кивы Отказ

Во всяком случае, я думаю, что Pysimplegui выглядит так, будто она имеет много интересных функций. Набор виджетов соответствует Tkinter и даже немного выходит за пределы этого. Pysimplegui также имеет много Крутые демонстрационные приложения на их github. У них также есть информация о том, чтобы превратить ваше приложение в исполняемый файл на Windows и Mac с помощью Pyinstaller, что то, что вы обычно не видите в документации для инструментария GUI.

Если вы ищете простой инструментарий GUI, Pysimplegui может быть прямо вверх по вашему аллею.