Python сделать окно активным

Обновлено: 17.06.2024

Получить активное окно с помощью Python

Я хотел бы получить активное окно на экране с помощью python.

Например, интерфейс управления маршрутизатором, в котором вы вводите имя пользователя и пароль как admin

Этот интерфейс администратора - это то, что я хочу захватить с помощью python для автоматизации ввода имени пользователя и пароля.

Какие импорт потребуются для этого?

ОТВЕТЫ

Ответ 1

Ниже приведен код для Python 3:

Ответ 2

Следующий script должен работать в Linux, Windows и Mac. В настоящее время он тестируется только на Linux (Ubuntu Mate Ubuntu 15.10).

Необходимые условия

Для Linux:

Установите wnck ( sudo apt-get install python-wnck в Ubuntu, см. libwnck.)

Для Windows:

Убедитесь, что win32gui доступен

Для Mac:

Убедитесь, что AppKit доступен

script

Ответ 3

Преимущество в том, что он работает без дополнительных модулей. Если вы хотите, чтобы он работал на нескольких платформах, достаточно изменить строки команд и регулярных выражений, чтобы получить нужные вам данные на основе платформы (со стандартным определением платформы if/else, показанным выше sys.platform).

С другой стороны: импорт wnck работает только с python2.x при установке с помощью "sudo apt-get install python-wnck", так как я использовал python3.x, единственным вариантом был pypie, который я не тестировал. Надеюсь, это поможет кому-то еще.

Ответ 4

Там действительно нет необходимости импортировать какие-либо внешние зависимости для таких задач, как это. Python поставляется с довольно аккуратным интерфейсом внешних функций - ctypes , который позволяет вызывать совместно используемые библиотеки C. Он даже включает специальные привязки для наиболее распространенных библиотек DLL Win32.

Например, чтобы получить PID окна foregorund:

Ответ 5

Спасибо за ответ нуно Андре, который показал, как использовать ctypes для взаимодействия с API-интерфейсами Windows. Я написал пример реализации, используя его подсказки.

Библиотека ctypes включена в Python начиная с версии 2.5, что означает, что она есть практически у каждого пользователя. И этот интерфейс намного чище, чем старые и мертвые библиотеки, такие как win32gui (последнее обновление в 2017 году на момент написания статьи).

В основном, ctypes включает в себя привязки для наиболее распространенных библиотек DLL Windows. Вот как вы можете получить заголовок окна переднего плана в чистом Python, без каких-либо внешних библиотек! Просто встроенные ctypes!: -)

Самое классное в ctypes - это то, что вы можете использовать Google любой API Windows для всего, что вам нужно, и если вы хотите его использовать, вы можете сделать это через ctypes!

Код Python 3:

Производительность очень хорошая: 0.01 МИЛЛИСЕКОНД на моем компьютере ( 0.00001 секунд).

Также будет работать на Python 2 с очень незначительными изменениями. Если вы на Python 2, я думаю, что вам нужно только удалить аннотации типов ( from typing import Optional и -> Optional[str] ).: -)

Технические пояснения Win32:

Переменная length - это длина фактического текста в UTF-16 (Windows Unicode). (Это НЕ число БАЙТОВ.) Мы должны добавить + 1 , чтобы добавить место для нулевого терминатора в конце строк в стиле C. Если мы этого не сделаем, у нас не будет достаточно места в буфере, чтобы соответствовать последнему действительному символу фактического текста, и Windows будет обрезать возвращаемую строку (это делается для того, чтобы соответствовать супер важной конечной строке Null -terminator).

Функция create_unicode_buffer выделяет место для такого количества символов UTF-16.

Большинство (или все? Всегда читают документы Microsoft MSDN!) API-интерфейсы Windows, связанные с текстом Unicode, принимают длину буфера как CHARACTERS, а НЕ как байты.

Также внимательно посмотрите на вызовы функций. Некоторые заканчиваются на W (например, GetWindowTextLengthW ). Это означает "Широкая строка", которая является именем Windows для строк Юникода. Очень важно, чтобы вы выполняли эти вызовы W , чтобы получить правильные строки Unicode (с поддержкой международных символов).

PS: Windows давно использует Юникод. Я точно знаю, что Windows 10 полностью Unicode и хочет только вызовы функций W . Я не знаю точную дату окончания, когда более старые версии Windows использовали другие многобайтовые форматы строк, но я думаю, что это было до Windows Vista, и кого это волнует? Старые версии Windows (даже 7 и 8.1) устарели и не поддерживаются Microsoft.

Ответ 6

Просто хотел добавить в случае, если это поможет, у меня есть функция для моей программы (это программное обеспечение для моего освещения ПК. У меня есть эта простая небольшая линейная функция:

Как сделать окно QMainWindow активным?

Помощь в написании контрольных, курсовых и дипломных работ здесь.

94731 / 64177 / 26122 Ответы с готовыми решениями:

Как сделать окно активным?
господа как можно сделать окно активным? у меня окно в таком состаянии - ShowWindow (hwnd.


Как сделать окно активным?
Как сделать активным другой процесс? Т.е есть моя программа на Windows Form и есть другой.


Как сделать окно стороннего приложения активным?
Как сделать окно стороннего приложения активным. Например окно Game называется. Здесь на форуме.

Ppid и активное окно

Помощь в написании контрольных, курсовых и дипломных работ здесь.

94731 / 64177 / 26122 Ответы с готовыми решениями:


Активное окно
Глюк активного окна При наведении мыши на окно, картинка из серого становится цветным. .

активное окно формы
Подскажите пожалуйста, как при нажатии кнопки вывести уже открытое окно на передний план среди.


Активное окно и трей
Здравствуйте. Возможно ли реализовать следующую задумку: окно программы активно, в нем что-то.


Закрыть активное окно
Как пограммно закрыть активное окно? Есть ли код?

87844 / 49110 / 22898

Помощь в написании контрольных, курсовых и дипломных работ здесь.

сделать окно не активное
господа как програмно сделать что бы окно было активное и не активное? Заранее спасибо.

Текущее активное окно
Напишите, пожалуйста, код для получения информации о текущем активном окне (как можно больше.

Активное окно (цикл)
Всем привет. Возникла трудность в написании одного кода. Код работает правильно, вот только мне.

Передача строк в активное окно
Добрый вечер. Есть написанная на WinForms панелька: Имеет значение true параметра TopMost.

Отобразить активное окно процесса
Как зная процесс вывести на передний план его окно? ShowWindow(pr.MainWindowHandle, 9); //работает.

Постоянно активное окно программы
Подскажите, как сделать окно программы постоянно активным, относительно других окон windows. Мне.

tkinter сделать окно активным раз в секунду

Здравствуйте, необходимо реализовать задачу. Есть окно приложения с таймером, по нажатию кнопки "пробел" таймер начинает отсчет от 40 до 0 с интервалом в одну секунду, окно всегда находится поверх других окон. Но если перейти в другое приложение, окно станет неактивным. Как сделать так, чтобы каждую секунду окно вновь становилось активным?

задан 16 фев '17 в 17:36 245 1 1 серебряный знак 12 12 бронзовых знаков

Внутри таймера необходимо вызывать focus_force() для главного окна. На примере исходной функции:

Как реализовать открытие окна при нажатии на иконку в трее?

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

В моём предыдущем вопросе мне подсказали как свернуть программу в трей с меню, но нету никакой информации по щелчку ЛКМ по иконке в трее.

Как привязать скрипт python к окну игры?

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


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

Решения вопроса 1

Задача не такая уж и простая, но реализовать возможно.

Я дам описание как я сделал нажатие клавиши в блокноте. Для ваших задач вы должны сами придумать реализацию.

Первое что понадобиться сделать, это получить идентификатор окна для дальнейшего с ним взаимодействия. Используем функцию FindWindow передавая первым параметром None, а вторым заголовок окна, его можно посмотреть используя Spy++ или WinSpy++.

pyOpenRPA туториал. Управление оконными GUI приложениями

Специально для Хабр я начинаю серию статей-туториалов по использованию RPA платформы OpenRPA. Буду рад получить от вас комментарии и замечания, если возникнут какие-либо вопросы. Надеюсь, что эта история не оставит вас равнодушными.

pyOpenRPA Туториал. Управление оконными GUI приложениями

Ранее я писал о том, что OpenRPA — это первая open source RPA платформа, которая позволяет полностью избавить себя от платных RPA аналогов. И, как выяснилось в процессе, эта тема позволяет не просто снять компании с "лицензионной иглы", а еще и увеличить получаемые бизнес-эффекты от разработанных роботов. Ведь архитектура новых RPA оказалась гораздо "легче" и, как следствие, быстрее.

Благодарю всех читателей, которые проявили интерес к моей предыдущей статье — я очень ценю мнение других, потому что именно это позволяет мне предлагать общественности наиболее актуальные решения. Еще раз спасибо вам за проявленный интерес!

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

Под оконными приложениями понимаются все виды GUI приложений, которые не визуализируются в WEB браузерах.

Ремарка. OpenRPA теперь становится pyOpenRPA

С момента опубликования предыдущей статьи произошли небольшие изменения в названии RPA платформы, а именно: OpenRPA переименовывается в pyOpenRPA.

С чем это связано?

Дело в том, что само по себе название OpenRPA является "говорящим", и "лежит на поверхности". По этой причине его выбрал я, а через некоторое время и другие. Так как концепция pyOpenRPA заключается в абсолютно безвоздмездном использовании и открытости для всех, в этой RPA платформе нет каких-либо бюджетов. В связи с этим нет возможности и отстаивать монопольное право на использование названия (да это и не нужно). В связи с этим, было принято решение немного скорректировать название, чтобы избавить пользователей от возможной путаницы.

По поводу OpenRPA от другой команды: очень надеюсь, что им удастся реализовать свою идею, превзойти по всем параметрам платные RPA платформы, и сохранить свою открытось. В мире open source мы не конкуренты, а коллеги, которые трудятся в одном и том же направлении — в направлении создания полезного открытого продукта. Если говорить про их RPA платформу, то там поставлена цель создания аналога коммерческой RPA платформы с визуальным программированием в основе. Идея очень интересная и привлекательная, но крайне трудозатратная по исполнению (ведь не просто так лучшие RPA платформы постоянно дорабатываются огромными командами разработчиков, что ведет к комерциализации проекта). Желаю им удачи в достижении поставленных целей.

Навигация по туториалам pyOpenRPA

Туториал сверстан в виде серии статей, в которых будут освещаться ключевые технологии, необходимые для RPA.

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

Перечень статей-туториалов (опубликованные и планируемые):

А теперь перейдем к самому туториалу.

Немного теории и терминов

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

Начнем с простого. Рассмотрим на примере классического блокнота, что видим мы, и что видит робот.

Что видим мы?

Notepad_human

Что видит робот?

Notepad_pyOpenRPA

Интерпретация

Благодаря архитектуре современных операционных систем у сторонних программ имеется программная возможность по обращению к UI элементам — они же UIO сторонних GUI приложений. Эта возможность изначально разрабатывалась для того, чтобы позволить программистам проводить регрессионное тестирование свеого софта, но позже выяснилось, что эту возможность можно использовать и в бизнес-процессах компании.

Как мы видим на изображении выше, для робота, блокнот — это набор различных UIO. Причем не просто UIO, а UIO c набором различных атрибутов, и набором различных действий. И что самое главное — наш робот имеет полный доступ ко всем этим атрибутам и действиям.

  • hidden — элемент спрятан в GUI интерфейсе от глаз пользователя
  • disabled — элемент недоступен для выполнения действий (нажатие, наведение мышкой и и т.д.)
  • left click — клик левой кнопкой мыши
  • right click — клик правой кнопкой мыши
  • type text — ввод текста в активную область
  • scroll up — пролистывание активной области вверх
  • scroll down — пролистывание активной области вниз
  • scroll left — пролистывание активной области влево
  • scroll right — пролистывание активной области вправо

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

Что такое UIO?

UIO — это User Interface Object (терминология pyOpenRPA). В целях обеспечения максимальной совместимости, этот экземпляр наследуется от обьектной модели, разработанной в библиотеке pywinauto (нажми, чтобы получить список доступных функций класса).

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

Правила формирования UIO селектора (UIOSelector)

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

Говоря другим языком, UIO селектор — это перечень условий, под которые может попасть 0, 1 или n UIO.

Ниже приведен перечень атрибутов — условий, которые можно использовать в спецификациях UIO:

Пример UIO селектора

PS. Перечень функций по работе с UIO селектором представлен в модуле UIDesktop (pyOpenRPA/Robot/UIDesktop.py). Именно эти функции будут использоваться при дальнейшей разработке робота.
Ознакомиться в полным перечнем функций модуля UIDesktop можно здесь

(По шагам) робот своими руками

Вот мы и добрались до самого интересного и важного раздела этого туториала — это пошаговый пример по созданию своего первого робота с использованием pyOpenRPA.

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

Шаг 0. Подготовим интерпретатор Python 3 для нового робота (развернем pyOpenRPA)

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

Доступно несколько вариантов загрузки pyOpenRPA:

Шаг 1. Создать проект робота

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

Создадим следующую структуру проекта:

  • Папка "RobotCalc":
    • Файл "RobotCalc_1.py" — скрипт робота 1, который мы пишем сейчас
    • Файл "RobotCalc_1_Run_x64.cmd" — скрипт запуска робота 1
    • Файл "RobotCalc_2.py" — скрипт робота 2, дополнение
    • Файл "RobotCalc_2_Run_x64.cmd" — скрипт запуска робота 2

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

    Ниже приведу пример "RobotCalc_1_Run_x64.cmd" файла (файл "RobotCalc_2_Run_x64.cmd" аналогичен):

    Шаг 2. Запустить студию pyOpenRPA и сформировать необходимые UIO селекторы

    • Открыть калькулятор (win + r > calc > enter)

    Если вы скачали преднастроенную версию pyOpenRPA с GitLab (вариант 1, простой):

    • Выполнить запуск cmd файла web студии pyOpenRPA из репозитория "pyOpenRPA\Studio\pyOpenRPA.Studio_x64.cmd"

    Если вы скачали пакет pyOpenRPA с помощью pip install pyOpenRPA (вариант 2, посложнее):

    • Выполнить запуск интерпретатора python со следующими аргументами: python -m pyOpenRPA.Studio "..\Studio\SettingsStudioExample.py", где SettingsStudioExample.py — это конфигурационный файл запуска студии pyOpenRPA. Преднастроенный шаблон этого файла можно скачать с репозитория pyOpenRPA в GitLab

    При любом из вариантов через 5 — 15 сек. должна автоматически отобразиться web студия pyOpenRPA (см. ниже)

    pyOpenRPA_studio


    Внешний вид web студии pyOpenRPA

    • В списке открытых оконных GUI приложений найти калькулятор и активировать режим поиска UI элемента по наведению указателя мыши (Кнопка "Mouse search")
    • Переключиться на калькулятор (alt + tab)
    • Навести указатель мыши на тот элемент, который нам необходим для того, чтобы определить состояние интерфейса калькулятора. Выберем radio кнопку Hex. Зеленая окантовка появляется поверх калькулятора благодаря студии pyOpenRPA — именно таким образом студия сообщает нам о том, какой UI элемент она видит в калькулятора по той точке, куда наведен указатель мыши.

    calc_radiobutton

    Студии pyOpenRPA подсвечивает зеленой окантовкой обнаруженный UI элемент по месту указателя мыши на калькуляторе

    • Для того, чтобы остановить процесс поиска UI элемента необходимо зажать клавишу ctrl на 2-4 секунды, после чего в WEB интерфейсе студии появится иерархния до UI элемента, который студия подсвечивала зеленой окантовкой.

    pyOpenRPA_studio_calc_ui_hex

    Студия pyOpenRPA отобразила иерархию нахождения UI элемента в калькуляторе после отправки сигнала завершения поиска UI элементов (длительное нажатие ctrl)

    Для того, чтобы убедиться в том, что элемент был обнаружен корректно, достаточно нажать кнопку "Highlight" по тому UI элементу, который интересует. Программа повторно нарисует эеленую окантовку поверх того UI элемента, который был обнаружен.

    Далее выполнить клик по UI элементу в окне иерархии в студии, после чего перейти в окно редактирования UIO селектора (UIO селектор далее будет использоваться в коде робота в Python 3)

    Студия pyOpenRPA сформировала UIO селектор в автоматическом режиме к UI элементу калькулятора

    В нашем примере UI элемент расположен на 4-м уровне вложенности с атрибутом title = "Hex". В автоматическом режиме pyOpenRPA формирует UIO селектор по индексам расположения в вышестоящих UI элементах. Такой подход достаточно нежелательно использовать в конечных роботах, потому что индексы расположения UI элементов могут динамически изменяться во время работы программы.

    Произведем преобразование нашего UIO селектора:

    в следующий вид:

    • В результате преобразований убрали лишнее условие "title":"Калькулятор" и промежуточные уровни, которые характеризовались только индексами нахождения UI элементов. Вместо этого добавили условие поиска "title":"Hex" и установили область поиска "depth_start":3, "depth_end": 3 (в нашем случае это необходимо, потому что мы убрали явные уровни вложенности). Атрибуты "class_name" накладывает условие, что надо искать прилоежние с class_name = CalcFrame, а backend указывает pyOpenRPA, какую систему поиска UI элементов использовать (win32 или uia, у каждой и них есть + и -)
    • С помощью кнопки "Hightlight element" убедимся в том, что UI элемент, по-прежнему, обнаруживается студией pyOpenRPA (при нажатии на кнопку поверх UI элемента должна быть отрисована зеленая окантовка — новый UIO селектор работает корректно)

    Данный UIO селектор будем использовать в роботе для проверки состояния интерфейса калькулятора: если UI элемент успешно обнаруживается, то режим калькулятора установлен верный. Если UI элемент не обнаруживается, то режим калькулятора установлен неверный, и его нужно будет изменить. Для того, чтобы проверить наличие UI элемента по UIO селектору воспользуемся функцией pyOpenRPA.Robot.UIDesktop.UIOSelector_Exist_Bool

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

    Calc Vid Programmist

    Вид "Программист" в калькуляторе

    Активация элемента меню выполняется с помощью специальной функции menu_select у корневого UIO объекта GUI приложения.

    С помощью студии pyOpenRPA сформируем UIO селектор корневого объекта калькулятора

    Далее запросим UIO объект по UIO селектору, после чего вызовем функцию menu_select, в которую передадим строковый адрес вызываемого элемента меню

    Шаг 3. Консолидируем код в проекте робота

    Обадая всеми необходимыми UIO селекторами и функциями, перейдем к составлению целостного скрипта робота. Ниже я приведу код RobotCalc_1.py файла, готового для запуска (python.exe "RobotCalc_1.py") c детальным описанием каждой строки.

    Внимание! При запуске робота убедитесь в том, что калькулятор находится в активном состоянии на экране вашего компьютера. Робот начнет отслеживать состояние калькулятора. Если в калькуляторе не будет установлен режим программиста, то робот в течение 1 секунды вернет его в данный режим.

    Дополнение. Дорабатываем робота, чтобы он еще включал калькулятор (если он выключен), раскрывал его (если он свернут)

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

    Для запуска калькулятора будем использовать функцию os.system

    • Для проверки состояния окна (свернуто в трэй или развернуто) is_minimized
    • Для восстановления свернутого окна будем использовать функцию restore
    • Итого получим следующий исходный код робота (файл RobotCalc_2.py).

    PS 1. Для сравнения: Реализация аналогичного алгоритма в другой RPA платформе с помощью инструментов визуального программирования потребует в 3-4 раза больше пространства рабочей области экрана (в связи со спецификой визуального программирования).

    PS 2. Перечень всех функций в модуле UIDesktop (pyOpenRPA/Robot/UIDesktop.py)
    Ознакомиться в полным перечнем функций модуля UIDesktop можно здесь

    Подведем итоги

    Итак, мы успешно преодолели первые шаги по созданию бесплатных программных роботов. Безусловно, эта статья покрывает далеко не все области программной роботизации. В следующих статьях-туториалах мы остановимся на оставшихся "столпах" роботизированного управления (мышь, клавиатура, распознавание изображения с экрана и web манипуляции).

    Надеюсь, что рассмотренные технологии, в первую очередь, помогут вам или вашей компании в достижении поставленных целей. А во вторую очередь, пусть получают выгоду и другие участники RPA рынка (да, я про вендоров платных RPA платформ, многие из которых базируются в США).

    Всегда открыт к вашим комментариям, и буду рад помочь вам в решении ваших вопросов.

    Быстрый, мощный интерфейс на Python

    DearPyGui

    DearPyGui

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

    Парадигма Retained Mode позволяет создавать чрезвычайно динамичные интерфейсы. Dear PyGui не использует нативные виджеты, а рисует с помощью видеокарты компьютера, как PyQt (используя API рендеринга DirectX11, Metal и Vulkan).

    Почему Dear PyGui?

    По сравнению с другими библиотеками Python GUI Dear PyGui уникален:

    Рендеринг на GPU.

    Простая встроенная поддержка асинхронных функций.

    Полное управление темами и стилями.

    Простое встроенное окно логирования.

    70+ виджетов, сотни их комбинаций.

    Подробная документация, примеры и беспрецедентная поддержка.

    Основные моменты

    Темы — 10 встроенных тем и система пользовательских тем.

    Graphing — API для работы с графиками (обертка ImPlot).

    Canvas — низкоуровневый API для рисования.

    Logging — API логирования.

    Виджеты — просто прокрутите вниз, чтобы увидеть их.

    Установка

    Убедитесь, что у вас установлен как минимум Python 3.7 (64 бит).

    Зависимости

    Начинаем писать GUI

    Dear PyGui предоставляет разработчикам python простой способ создания быстрых и мощных графических интерфейсов для скриптов. Dear PyGui состоит из окна программы, окон и виджетов. Окно программы является главным окном вашей программы и создаётся в конце основного скрипта вызовом start_dearpygui().

    Вывод

    Вывод

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

    Встроенная документация

    Встроенная документация

    Dear PyGui состоит из двух модулей: dearpygui.core и dearpygui.simple.

    dearpygui.core содержит базовую функциональность Dear PyGUI. Через ядро можно делать всё. На самом деле это расширение на языке Си, просто обёрнутое в модуль.

    dearpygui.simple содержит обёртки и утилиты уже из кода ядра для удобства работы с Dear PyGui.

    Инструменты разработки

    В Dear PyGui есть полезные инструменты разработки. Метод show_source() принимает имя входного файла Python.

    Встроенное логирование

    Мощный инструмент разработки — Logger, он вызывается методом show_logger(). Уровней логирования 6: Trace, Debug, Info, Warning, Error, Off. Логгер выведет установленный уровень и отфильтрует все уровни ниже.

    Логирование

    Логирование

    Уровень лога mvTRACE покажет все команды.

    Пишем виджеты и контейнеры

    Элементы библиотеки можно разделить на:

    обычные предметы: поля ввода, кнопки;

    контейнеры (окно, всплывающее окно, всплывающая подсказка, элемент-потомок);

    элементы макета (группа, следующая колонка (next_column)).

    Элементы добавляются командами с префиксом add_.

    Виджеты

    Виджеты

    Каждый элемент должен иметь уникальное имя. По умолчанию, если это применимо, имя станет меткой элемента. При желании можно изменить метку:

    Ключевое слово label, которое отобразит метку вместо имени.

    Некоторые имена элементов автоматически генерируются для элементов без аргументов имени в функции (т. е. same_line). Но у них есть необязательное ключевое слово name, и его можно заполнить, когда понадобится ссылка на элемент.

    Контекстные менеджеры dearpygui.simple автоматизируют вызов функции end, позволяют сворачивать код и в самом коде показывают иерархию.

    По умолчанию элементы создаются в порядке их описания в коде.

    Но, указав контейнер parent, элементы можно добавлять не по порядку. parent вставляет виджет в конец списка дочерних элементов родителя. before в сочетании с ключевым словом parent помещает один элемент перед другим в списке элементов-потомков.

    Виджеты

    Каждый виджет ввода имеет значение, которое можно задать с помощью ключевого слова default_value при создании или во время выполнения команды set_value. Для доступа к значению виджета можно использовать команду get_value. Мы также можем передавать значение виджета непосредственно в переменную python и из неё.

    Виджеты и обратные вызовы окна

    Каждый элемент ввода имеет обратный вызов, который выполняется при взаимодействии с виджетом.

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

    Каждый обратный вызов должен принимать аргументы sender и data.

    sender сообщает обратному вызову имя элемента, которым он вызывается.

    Аргумент data применяется разными стандартными обратными вызовами для отправки дополнительных данных через определение callback_data.

    Виджеты оконного типа имеют специальные обратные вызовы, которые срабатывают при таких событиях, как изменение размера или закрытие окна. Обратные вызовы для конкретных окон могут быть применены к виджету любого типа окна. on_close будет запускать обратный вызов, назначенный ключевому слову, при закрытии окна, а set_resize_callback() будет запускаться при каждом изменении размера контейнера и может быть установлен на любое конкретное окно ключевым словом handler, по умолчанию это MainWindow.

    Если вы хотите, чтобы обратный вызов выполнялся на каждом фрейме, воспользуйтесь set_render_callback().

    Добавляем и удаляем виджеты в рантайме

    С помощью Dear PyGui вы можете динамически добавлять и удалять любые элементы во время выполнения программы. Это можно сделать, используя обратный вызов для выполнения команды *add_ нужного элемента, указав родителя, к которому будет принадлежать элемент. По умолчанию, если не указан родительский элемент, виджет будет добавлен в MainWindow.Используя ключевое слово before при добавлении элемента, вы можете контролировать, перед каким элементом родительской группы будет находиться новый элемент. По умолчанию новый виджет помещается в конец.

    Хранилище значений и данных

    Когда новый виджет добавлен, в системное хранилище добавляется некое значение. По умолчанию идентификатор этого значения — имя виджета. Значения извлекаются из системы значений с помощью get_value("source name"). Меняются значения вручную, методом set_value("source name"). Чтобы виджеты разных типов значений могли использовать одно и то же значение в системе хранения, сначала должно быть создано большее значение.

    Помните, что вы можете хранить любой объект Python в хранилище данных, даже пользовательские типы данных.

    Вот так можно хранить отображение:

    Очень важный виджет для функциональности GUI — это бар меню. Строки меню всегда отображаются в верхней части окна и состоят в основном из:

    Лента главного меню.

    Конкретные элементы меню.

    Элементы меню добавляются слева направо, а элементы подменю — сверху вниз. Они могут быть вложенными, насколько это необходимо:

    Диалоги выбора файлов и каталогов

    Диалог выбора каталога вызывается select_directory_dialog(), которому необходим обратный вызов.

    Файловые диалоги вызываются open_file_dialog(), которому должен быть задан обратный вызов. Аргумент data возвращаемого обратного вызова будет заполнен списком строк из пути к папке и к файлу. Расширения — это дополнительное ключевое слово к диалогу файлов, которое позволяет отфильтровать файлы в диалоге по расширениям.

    Графики

    В Dear PyGui есть «простые графики» и «графики», оба типа могут быть динамическими.

    Графики

    Графики

    Простые графики берут список и строят данные по оси y в зависимости от количества элементов в списке. Это могут быть линейные графики или гистограммы.

    В «графиках» используются координаты x и y. Вызывать их нужно командой add_plot(), затем данные могут быть добавлены в виде линейного или рассеянного ряда. Вот список возможностей:

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

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

    Двойной клик масштабирует данные.

    Правый клик и перетаскивание увеличивают область.

    Двойной правый клик открывает настройки.

    Shift + правый клик и перетаскивание масштабирует область, заполняющую текущую ось.

    Прокрутка колёсика позволяет рассмотреть детали.

    Прокрутка колёсика по оси увеличивает только по этой оси.

    Можно переключать и скрывать наборы данных на легенде.

    Простые графики можно сделать динамическими, изменив значение вызова plot с помощью set_value().

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

    Рисование и холст

    В Dear PyGui есть низкоуровневый API, хорошо подходящий для рисования примитивов, пользовательских виджетов и даже динамических рисунков.


    Рисунок запускается вызовом add_drawing(). Начало холста — в левом нижнем углу.

    Рисунки имеют масштаб, начало и размер, к которым можно получить доступ и задать их. Масштаб — это множитель значений элементов x и y. Размер указывается в пикселях. На рисунках можно отображать “.jpg”, “.jpg” или “.bmp”. Изображения рисуются с помощью draw_image().

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

    Дельта-время и внутренние часы

    Dear PyGui имеет встроенные часы для проверки общего времени работы. get_total_time(), возвращается общее время работы в секундах.

    Также с помощью команды get_delta_time() мы можем проверить время между кадрами рендеринга в секундах.

    Таблицы

    Dear PyGui имеет простой API таблиц, который хорошо подходит для статических и динамических таблиц.

    Таблицы

    Таблицы

    Виджет таблицы запускается вызовом add_table(). Для редактирования виджета таблицы мы можем использовать методы add_row(), add_column(), которые добавят строку/столбец к последнему слоту таблицы.

    В качестве альтернативы мы можем вставить строки/столбцы с помощью insert_row(), insert_column(). Столбцы и строки вставляются в соответствии с их индексным аргументом. Если указанный индекс уже существует, то выходящие столбцы/строки будут удалены, а новая строка/столбец будет вставлена по указанному индексу.

    Кроме того, при добавлении или вставке строки/столбца неуказанные ячейки по умолчанию окажутся пустыми. Кроме того, заголовки и ячейки могут быть переименованы, а их значения изменены. Ячейки можно выбирать. Это означает, что мы можем применить обратный вызов к таблице и получить через отправителя данные о том, какая ячейка была выбрана, и даже получить текст внутри ячейки.

    Опрос устройств ввода

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

    Опрос устройств ввода

    Опрос устройств ввода Вот список функций опроса

    Как скрыть окно консоли в python?

    Я хочу создать автономные двоичные файлы для Linux и Windows. И в основном я хочу, чтобы при запуске бота окно консоли должно скрываться, и пользователь не должен был видеть это окно.

    Что я могу сделать для этого?

    ОТВЕТЫ

    Ответ 1

    Просто сохраните его с расширением .pyw . Это предотвратит открытие окна консоли.

    В системах Windows нет понятия "исполняемый режим". Установщик Python автоматически связывает файлы.py с файлом python.exe, чтобы двойной щелчок на файле Python запускал его как скрипт. Расширение также может быть.pyw, в этом случае окно консоли, которое обычно появляется, подавляется.

    Ответ 2

    В linux просто запустите его, без проблем. В Windows вы хотите использовать исполняемый файл pythonw.

    Update

    Хорошо, если я понимаю вопрос в комментариях, вы спрашиваете, как сделать окно команд, в котором вы запустили бот из командной строки?

    • для Windows

    Я думаю, что правильно. В любом случае, теперь вы можете закрыть терминал.

    Ответ 3

    В Unix-системах (включая Linux, macOS и BSD)

    Используйте nohup mypythonprog & , и вы можете закрыть окно терминала, не нарушая процесс. Вы также можете запустить exit , если вы работаете в облаке, и не хотите оставлять зависающий процесс оболочки.

    В системах Windows

    Сохраните программу с расширением .pyw , и теперь она будет открыта с помощью pythonw.exe . Нет окна оболочки.

    Например, если у вас есть foo.py , вам нужно переименовать его в foo.pyw .

    Ответ 4

    Если все, что вы хотите сделать, это запустить Python Script на компьютере с Windows, на котором установлен Python Interpreter, преобразование расширения вашего сохраненного Script из '.py' в '.pyw' должно сделать трюк,

    Но если вы используете py2exe для преобразования вашего Script в автономное приложение, которое будет запускаться на любой машине Windows, вам нужно внести следующие изменения в ваш файл setup.py.

    Следующий пример представляет собой простой python-GUI, созданный с использованием Tkinter:

    Измените "консоль" в приведенном выше коде на "windows"..

    Это откроет только созданный графический интерфейс Tkinter и отсутствие окна консоли.

    Ответ 5

    Это скроет вашу консоль. Сначала выполните эти строки в коде, чтобы сначала скрыть консоль.

    Ответ 6

    Дополнительная информация. для ситуаций, в которых потребуется решение win32gui, опубликованное Мохсеном Хаддади ранее в этой теме:

    Начиная с python 361, win32gui & win32con не являются частью std-библиотеки python. Для их использования необходимо установить пакет pywin32; теперь возможно через pip.

    Дополнительная информация о пакете pywin32 находится на: Как использовать модуль win32gui с Python? ,

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

    Читайте также: