Привет у меня есть вопрос что лучше использовать для создания GUI в python 3
Я о том является ли kivy более сложным чем PyQt я видел что интерфейсы в kivy более эстетичны но насколько их сложнее делать(tkinter или easygui и не рассматриваю)
Довольно давно возникла необходимость в мультиязычном онлайн переводчике при закрытом браузере.
Нет, так то я и словарем в "особо тяжелых" случаях пользоваться не брезгую, но иногда приходится читать немаленький текст, и не все слова я знаю, как следствие теряется контекст.
Translate-shell вещь достаточно удобная, особненно, если пишешь, допустим, в Vi/vim. Переключился в соседнюю консоль и переводи.
Ключи простейшие и запоминаются легко.
Но этого как обычно было мало. Захотелось графики.
Работа в SublimeText и Zeal несколько удобней, нежели голая консоль.
Хм… Подумал-подумал, и решил прикрутить переводчик на горячую клавишу.
Выбор пал на gxmessage. Zenity меня не устроил, уж и не помню почему.
Был написан код:
"Ctrl+1" $HOME/progs/trans.sh
Некоторое время меня это устраивало. На "контрол+1" с английского, "контрол+2" на английский. Хорошо...
Но тут translate-shell начал давать сбои.
Не знаю, что произошло у разрабов, но меня это совсем огорчило.
Я решил, пора, давно на питоне не писал.
Недолгие поиски в гугл привели меня к Yandex.API, Python и GTK+ 3 в виде модуля gi.
Почему gi, ведь обычно писал на PyQt5? Он на моей машине работает значительно быстрее. Машина не новая, памяти тоже(по современным меркам) не ахти.
Всем привет!
Сегодня я не буду писать неинформативные посты про свою игру. Сегодня, наконец-то, немного напишу о технической части. А конкретнее - о "Менеджере Событий".
Рассмотрим ситуацию. Допустим, в интерфейсе разрабатываемой нами/вами игре есть верхняя панель с информацией о валюте игрока и опыте. Эти параметры могут меняться. И меняются они часто.
Как нам постоянно отображать в упомянутой выше панели актуальную информацию об этих параметрах?
* Обновлять информацию каждый кадр в "Update"?
Простой способ, но крайне не желательный с точки зрения оптимизации: "тут" каждый кадр избыточно делаем расчеты/обращения к каким-нибудь параметрам (которые не обновляются каждый кадр), "там" каждый кадр что-то делаем, "сям" и "еще в 30 местах"... Все это копится как снежный ком, а если еще и вычисления не самые простые, то рано или поздно скажется на производительности. Да и в дальнейшем сопровождать такой код может быть не просто...
* В компоненте, где могут измениться параметры денег и/или опыта добавить ссылку на "панель с информацией о валюте и опыте" и уже оттуда вызывать метод обновления отображаемой информации?
С точки зрения производительности этот вариант лучше, потому что каждый кадр не происходит бессмысленное обновление не изменившейся информации. Однако, этот способ не удобен при большом количестве мест, где могут меняться значения валюты и/или опыта.
* Использовать "Менеджер Событий".
На мой взгляд это самый удобный и оптимальный способ. Где бы не происходило изменение значения денег или опыта, следом за изменением сообщаем Менеджеру, что произошло изменение ресурсов. И он уже "сообщает" всем подписавшимся на событие "изменение ресурсов", что событие гм... наступило.
Приведу один из вариантов реализации...
Это наш класс менеджера:
using System;
public static class EventManager
{
#region Actions
public static Action<string> eventOnResourceUpdate;
#endregion
#region Public methods
public static void CallOnResourceUpdate(string _resID)
{
eventOnResourceUpdate?.Invoke(_resID);
}
#endregion
}
Он статичный (модификатор "static"), это позволит использовать его без создания экземпляра. Action<string> eventOnResourceUpdate - это делегат (грубо говоря "событие", на которое мы будем "подписываться" в классе панели с инфой об опыте и валюте). Обратите внимание на <string> - это указан тип аргумента метода/методов, которые могут подписываться на данное событие - что бы не создавать "событие" для каждого ресурса и что бы не обновлять без необходимости информацию обо ВСЕХ ресурсах, метод обновления будет содержать один аргумент - строковое наименование ресурса.
А CallOnResourceUpdate(string _resID) метод, который мы будем вызывать в месте изменения ресурсов (н-р, при списании денег или получении опыта).
Строчка eventOnResourceUpdate?.Invoke(_resID) означает, что если делегат eventOnResourceUpdate НЕ пустой (НЕ равен null), т.е. имеет подписавшиеся методы, то только в таком случае будут вызваны/исполнены все подписанные методы.
Это фрагмент класса панели, отображающей опыт и деньги:
public class ProfileTopPanelController : MonoBehaviour
{
private void OnEnable()
{
EventManager.eventOnResourceUpdate += HandlerOnResourceUpdate;
}
private void OnDisable()
{
EventManager.eventOnResourceUpdate -= HandlerOnResourceUpdate;
}
private void HandlerOnResourceUpdate(string _resID)
{
switch (_resID)
{
case "experience":
UpdateExperience(); //Метод обновления информации об опыте
break;
case "gold":
UpdateCommonCurrency(); //Метод обновления информации о деньгах
break;
}
}
}
В Unity-методах OnEnable и OnDisable (обращаю внимание новичков на то, что очень важно соблюдать регистр написания этих методов, иначе Unity не будет использовать их, т.к. рефлексия их не найдет) мы соответственно подписываемся и отписываемся от делегата ("события обновления ресурсов") eventOnResourceUpdate. После этого все время, что панель активна, при вызове метода CallOnResourceUpdate в нашем Менеджере, панель будет выполнять код метода HandlerOnResourceUpdate с аргументом - идентификатором ресурса.
Если необходимо, что бы код выполнялся и во время временной "деактивации" панели (причины могут быть разные...), то отписку от события переносим в метод OnDestroy.
А это фрагмент кода в том месте, где идет изменение параметров денег/опыта:
//...
//Здесь код изменения кол-ва ресурса
//...
EventManager.CallOnResourceUpdate(_id); //А здесь идет вызов события изменения ресурсов, "_id" - это строковый идентификатор ресурса
Такое несложное решение, конечно же, можно использовать не только для "отслеживания" изменения ресурсов в вашей игре. Можно добавить любые события, которые вам необходимы. Нужно событие для сохранения? Оно может выглядеть следующим образом public static Action eventOnSave; какой-нибудь NPC получил новый уровень? Пожалуйста - public static Action<object> eventNpcNewLevel;
И т.д.
Думаю, на этом можно закончить.
Спасибо за внимание и успехов всем в ваших начинаниях!
Всем интересующимся хотелось бы сообщить или просто напомнить, что на следуюшей неделе, во вторник 26.02.19 в выставочном центре г. Нюрнберг стартует одна из самых крупных международных выставок в сфере embedded electronic («встраиваемые системы») — embedded world 2019.
Выставка проходит, как обычно, на протяжении трёх дней — и предоставляет массу интересного материала для ознакомления с самыми новыми тенденциями в сфере современной электроники и соответствующего программного обеспечения — а также в отраслях промышленных автоматизации, робототехники, цифровых технологий и всяческих сетевых тенденций (Интернет Вещей/IoT и прочие плюшки).
В этом году упор делается на всевозможные типы дисплеев, человеко-машинные интерфейсы (HMI), машинно-машинную коммуникацию (M2M), графические оболочки пользователя (GUI) и многом другом.
Маленькая хитрость
На стенде издательства «Weka Fachmedien» после заполнения небольшого опросника вы получите возможность бесплатно подписаться на целый ряд обычно недешёвых профессиональных журналов по разработке электроники, по электротехнике, промышленному дизайну и современной автомобильной электроники. Абонемент автоматически НЕ продлевается и не становится платным — так что вы ничем не рискуете (но бланк всё же прочитайте перед подписыванием :).
Бесплатные билеты
Бесплатные билеты раздают вот здесь:www.messe-ticket.de/Nuernberg/embeddedworld2019/Regis...
Разное
Собственно, как интересное могу порекомендовать стенд компании Vector (он один из самых больших) — там софт и железо для разработки и калибровки автоэлектроники представлены, ими все автопроизводители и поставщики автокомплектующих пользуются.
Недалеко находится и стенд их прямого конкурента, компании ETAS — но у «Вектора» обычно гораздо информативнее, интереснее и насыщеннее, хотя с ETAS работают непосредственно, например, BMW и Volvo.
Организация Raspberry Pi Foundation объявила о создании нового легковесного пользовательского окружения PIXEL (Pi Improved Xwindows Environment, Lightweight), являющегося ответвлением от рабочего стола LXDE. Проект развивался постепенно на основе переработки LXDE для воплощения задуманной концепции рабочего стола для Raspberry Pi и теперь достиг состояния полноценного продукта, готового для включения в состав дистрибутива Raspbian. Сборка Raspbian, переведённая на окружение PIXEL, уже доступна для загрузки.
Особенности PIXEL и выпуска Raspbian на его основе:
- Реализована графическая заставка, отображаемая во время загрузки;
- В соответствии с пожеланиями пользователей в PIXEL применяется традиционная нумерация версий, вместо вводящих в заблуждения номеров в форме дат ("2016-05-10"). Номер версии отображается в нижнем право углу заставки ("1.0 - 09/16");
- Значительно изменён стиль рамки окон, которые теперь выглядят более современно за счёт скруглённых углов, тонких рамок, более выделенного заголовка и новых кнопок закрытия, сворачивания и раскрытия на весь экран. Для упрощения изменения размера окна мышью, область захвата указателем расширена на несколько пикселей за пределами границ окна;
- Для улучшения качества отрисовки шрифтов включён режим субпиксельного хинтинга Infinality. По умолчанию сохранён шрифт Roboto, который уже несколько лет предлагается на рабочем столе Raspberry Pi;
- В состав включена подборка обоев для рабочего стола, созданных на основе фотографий из путешествий одного из разработчиков Raspberry Pi;
- Задействован новый набор цветных пиктограмм для панели, меню и файлового менеджера, подготовленный специально для проекта Raspberry Pi. По умолчанию отображение пиктограмм в меню отдельных приложений отключено;
- Реализованы новые индикаторы перегрузки. Вместо ранее выводимых в верхнем правом углу экрана жёлтых и красных квадратов, сигнализирующих о превышении допустимой температуры или недостаточном напряжении, добавлены символьные метки в виде удара молнии и термометра, которые позволяют наглядно понять суть предупреждения;
- Изменено оформление экрана входа в систему, стиль которого унифицирован с основным рабочим столом. По умолчанию по-прежнему предлагается автоматический вход в свой сеанс без ввода параметров аутентификации;
- В меню управления беспроводной сетью добавлены элементы для полного отключения WiFi или Bluetooth. Также реализована возможность разрыва соединения с точкой доступа через клик на данную точку доступа в меню WiFi;
- В базовый состав включено приложение RealVNC. Включение VNC-сервера для предоставления доступа к своему рабочему столу производится во вкладке Interfaces конфигуратора Raspberry Pi, после чего на панели выводится специальный индикатор. Для подсоединение к другим рабочим столам в состав также входит клиент VNC, который представлен в секции Internet в меню приложений;
- В состав включён эмулятор SenseHAT (плата расширения с RGB-LED матрицей 8x8, джойстиком, акселерометром, гироскопом, термометром, гигрометром, барометром, магнетометром - прим. Кербитера);
- Вместо ранее поставляемого браузера Epiphany в состав включена редакция Chromium для Raspberry Pi, в которой добавлена поддержка средств аппаратного ускорения воспроизведения видео. Из предлагаемых по умолчанию дополнений отмечаются блокировщик рекламы uBlock Origin и дополнение h264ify для активации показа в YouTube видео в формате для которого поддерживается аппаратное ускорение в Raspberry Pi. Браузер Epiphany при желании можно установить из репозиториев (пакет epiphany-browser).
Источник перевода - opennet.ru
Связанный пост:
http://pikabu.ru/story/yevolyutsiya_polzovatelskogo_grafiche...
За последние несколько лет тенденции в визуальном оформлении переориентировались на мобильный рынок. А мобильный рынок ищет новых пользователей в упрощении графического интерфейса. Поэтому что имеем, то имеем. Но продолжаем вспоминать, как это было и как теперь стало.
Blackberry. История мобильников от этой компании начинается с 2000 года и выхода на рынок устройства под названием 957 Proton. Использовался монохромный экран, поэтому интерфейс строился с расчётом на отсутствие цветов.
2004 год. Выход первого цветного телефона.
2007 первый коммуникатор. 8820
2014 Classic (Q20). В дальнейшем компания задумывается о переходе на Android.
Android 1.0 2008 Он отличается от привычного нам.
Android 3.0 2011
Android 4.0 2011 переход к качеству. Доля устройств на платформе на второй квартал 2011 составляла 39,5 %. В третьем квартале 2012 72,4 %.
Android 6.0 2015
Ios 1.0 2007 год.
Ios 5.0 год 2011
Ios 8.0-9.0 2014-15
Последняя palm OS 2007
Ubuntu touch разрабатывается с 2013 года, интересна тем, что в итоге разработки должна получиться единая система для всех типов компьютерных устройств, для которых она предназначается (планшеты, компьютеры, смартфоны и тд), а также является нормальной линуксбазированной операционкой. На данный момент выпущено 4 смартфона и как минимум один планшет на ней. Желающие могут поставить её на ряд устройств, изначальной операционкой которых является Android.
Firefox OS Разрабатывается также с 2013 года. На официальном сайте 18 телефонов и 2 телевизора представлены в качестве огнелисных устройств.
Последний симбиан — Nokia Bella
Windows mobile 2000 использует в качестве основы Windows CE 3.0
Windows mobile 5 2005
Windows Phone 7 2010
Windows 10 Mobile 2016
Bada — попытка Samsung использовать ядро линукс для своих корыстных целей для использования в своих мобильных устройствах.