Товаров: 0 (0р.)

Шаблоны кнопок: PSD Кнопки, более 5 000 качественных бесплатных PSD-шаблонов

Содержание

Текст и кнопка HTML шаблоны

Шаблоны веб-сайтов для текста и кнопок

Шаблоны веб-сайтов для текста и кнопок — это инструменты веб-дизайна, которые обеспечивают новый опыт навигации по содержанию. Шаблоны кнопок действий являются частью вдохновляющих элементов дизайна веб-сайтов с использованием бесплатных тем WordPress, а загруженные стили простого на вид сайта выглядят намного лучше. Некоторые конструкторы веб-сайтов могут найти дополнительные продукты на выбор, но мы предоставляем одностраничный конструктор, который объединяет их и должен сэкономить ваше время. Нажав на кнопку «Следуй за нами» или «Зарегистрироваться», вы узнаете, как шаг за шагом создать веб-сайт WordPress, используя набор кнопок Bootstrap 4 и различные стили, включая стиль текста с эффектом наведения, кнопку загрузки с эффектом наведения, лучший дизайн контактной формы, и другие. 30 простых, но красивых шаблонов навигации с боковой панелью 2021 используют 20 потрясающих бесплатных тем WordPress, которые создают бесплатную боковую панель начальной загрузки удобные шаблоны навигации.

Бесплатные потрясающие контактные формы Bootstrap улучшат пользователя сайта опыт создания лучших шаблонов кнопок начальной загрузки, более привлекательных и добавление 30 лучших бесплатных шаблонов, чтобы оживить. Бесплатная навигация на боковой панели начальной загрузки также является частью потрясающего бесплатного веб-сайта начальной загрузки с использованием бесплатного контактного поста в формате html5 css3 с лучшей навигацией на боковой панели начальной загрузки и дизайнами контактных форм для различных целей, таких как темы WordPress для туристических агентств и базовые кнопки социальных сетей. Наш шаблон помогает создавать текстовые кнопки с плавным переходом к жизненно важной ссылке, искать информацию в лучших социальных сетях и изменять разные цвета в цветовой схеме фона. Например, нажмите ссылку подписки, используя кнопку регистрации, кнопку входа в систему, чтобы войти в систему, текст зеленой кнопки, чтобы навести курсор на фоновое изображение, или превосходную службу поддержки, предлагающую вам прочитать самые популярные статьи по теме. Если щелкнуть форму обратной связи или просмотреть сведения о политике конфиденциальности, эти кнопки предоставят вам форму электронной почты или файл гиперссылки. Топ-30 простых социальных кнопок всегда будут доступны в любом наборе шаблонов, эти социальные кнопки могут формировать шаблоны 2021 года.

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

WPF стиль и шаблоны для многих кнопок?



Кажется, я не могу найти правильную комбинацию, чтобы получить желаемый эффект:

Текущая XAML:

<Button Content="Foo" prism:Click.Command="{Binding FooCommand}"
        Visibility="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={ncon:VisibilityBooleanConverter}}" />
<Button Content="Bar" prism:Click.Command="{Binding BarCommand}"
        Visibility="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={ncon:VisibilityBooleanConverter}}" />

Я хочу извлечь Visibility="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={ncon:VisibilityBooleanConverter}}" как стиль, чтобы применить его ко всем кнопкам (в пределах этого ресурса UserControl). Кажется, я не могу найти здесь правильную комбинацию, чтобы это произошло.

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

wpf binding styles controltemplate relativesource
Поделиться Источник myermian     22 апреля 2011 в 17:09

2 ответа


  • Шаблоны проектирования, используемые в WPF

    Ниже приводится отрывок из этой статьи на MVVM. Может ли кто-нибудь привести пример того, как эти другие шаблоны (command, DI) используются в WPF? Есть ли какие-либо другие шаблоны desgin, которые используются в WPF, которые вы не видите здесь? Есть и другие паттерны, о которых вы должны знать,…

  • Как панели инструментов WPF меняют стили своих кнопок?

    В WPF, если вы помещаете кнопку внутри ToolBar, кнопка автоматически получает другой стиль: нет границы по умолчанию, различные эффекты наведения и т. д. Какой механизм использует WPF для этого? Я знаю, как изменить стиль всех кнопок в программе, поместив Style TargetType=Button в ресурсы в…



2

Стиль будет выглядеть так, я полагаю:

<Style TargetType="{x:Type Button}">
    <Setter Property="Visibility"
            Value="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={ncon:VisibilityBooleanConverter}}"/>
</Style>

Разве это не работает?

Поделиться H.B.     22 апреля 2011 в 17:18



1

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={ncon:VisibilityBooleanConverter}}" Value="Visible">
            <Setter Property="Visibility" Value="Visible"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

Поделиться sobby01     22 апреля 2011 в 17:16


Похожие вопросы:


Стили управления и шаблоны для Windows 8 Metro-UI

Я столкнулся с некоторыми проблемами с внешним видом моего приложения C#/XAML Metro-UI. Я хочу настроить шаблон по умолчанию. Для другого типа приложений я могу взять стили и элементы управления по…


MVVM инструментарий (шаблоны) и XAML powertoys для работы wpf mvvm?

Недавно я скачал инструментарий MVVM на codeplex из WPF futures, который в основном имеет шаблоны (хотя я, кажется, не могу найти много документов для него) для создания стандартных приложений MVVM…


WPF Стиль Кнопок

У меня есть форма WPF, которая имеет много кнопок с одним и тем же кодом. Внешний вид всех кнопок должен быть одинаковым Например, код для одной из этих кнопок <Button x:Name=btnAddRelative…


Шаблоны проектирования, используемые в WPF

Ниже приводится отрывок из этой статьи на MVVM. Может ли кто-нибудь привести пример того, как эти другие шаблоны (command, DI) используются в WPF? Есть ли какие-либо другие шаблоны desgin, которые…


Как панели инструментов WPF меняют стили своих кнопок?

В WPF, если вы помещаете кнопку внутри ToolBar, кнопка автоматически получает другой стиль: нет границы по умолчанию, различные эффекты наведения и т. д. Какой механизм использует WPF для этого? Я…


WPF: многоразовый шаблон для кнопок изображений?

Мой проект WPF использует много кнопок изображений, но так как я не нашел способа сделать это правильно (я должен писать одни и те же триггеры и стиль каждый раз, разница только в источнике…


WPF C# стиль кнопки

Кто-нибудь знает, как воссоздать этот стиль кнопок в WPF? Так как я не знаю, как сделать разные отсеки. А также 2 различных текста и стиля текста?


WPF стиль для кнопок

Я не использовал WPF в течение очень долгого времени (около 4 лет). Но теперь, когда я снова начал использовать его для некоторого использования, вы можете видеть, что один из моих самых часто…


Как изменить стиль кнопок для отключенных кнопок WPF?

Я работаю над созданием простой игры tic-tac-toe, чтобы ознакомиться с WPF, из-за того, сколько времени прошло с тех пор, как я использовал этот формат. Я пытался отключить эту кнопку, чтобы люди не…


Одна сторона закругленных угловых кнопок в WPF?

В проекте есть две смежные кнопки. Стиль должен сделать внешнюю сторону двух кнопок в закругленных углах кнопок в WPF. Вот изображение кнопки, как они должны выглядеть Приведенный ниже код стиля…

7 основных правил проектирования кнопок — UXPUB

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

1. Делайте кнопки похожими на кнопки

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

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

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

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

Слабые различимые знаки – еще более серьезная проблема для мобильных пользователей. В попытке понять, является ли отдельный элемент интерактивным или нет, пользователи ПК могут навести курсор на элемент и проверить, изменится ли его состояние. У мобильных пользователей нет такой возможности. Чтобы понять, является ли элемент интерактивным, пользователи должны нажать на него – нет другого способа проверить интерактивность.

Не предполагайте, что что-то в вашем интерфейсе очевидно для ваших пользователей

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

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

Используйте для своих кнопок знакомый дизайн

Вот несколько примеров кнопок, знакомых большинству пользователей:

  • Кнопка с фоном и квадратными углами
  • Кнопка с фоном и закругленными углами
  • Кнопка с фоном и тенью
  • Прозрачная кнопка

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

Не забывайте о свободном пространстве

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

Как пользователь, вы не можете определить поле это или кнопка

2. Размещайте кнопки там, где пользователи ожидают их найти

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

По возможности используйте традиционные макеты и стандартные шаблоны интерфейса

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

Не играйте в «найди кнопку» со своими пользователями

Совет: Проверьте свой дизайн на понятность. Когда пользователи впервые переходят на страницу, содержащую действия, которые вы хотите, чтобы они совершили, они должны легко найти соответствующую кнопку.

3. Кнопки с подписью

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

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

Неясная подпись «ОК» не говорит о действии, совершаемом кнопкой

Не понятно, что означают «ОК» и «Отмена» в этом диалоговом окне. Большинство пользователей спросят себя: «Что произойдет, когда я нажму «Отмена»?

Никогда не создавайте диалоговое окно или форму, состоящую исключительно из двух кнопок «ОК» и «Отмена».

Вместо «ОК» лучше использовать подпись «Удалить». Кроме того, если «Удалить» является потенциально опасной операцией, вы можете использовать красный цвет, чтобы указать на этот факт.

Подпись «Удалить» четко сообщает пользователям о действииПотенциально опасное действие ‘Заблокировать карту’ окрашено в красный цвет. Изображение: Ramotion

4. Правильно подбирайте размер кнопки

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

Установите приоритетность кнопок

Покажите какая кнопка самая важная. Всегда старайтесь сделать кнопку основного действия более заметной. Увеличьте ее размер (сделайте кнопку более крупной, тем самым подчеркнув ее важность) и используйте контрастный цвет, чтобы привлечь внимание пользователя.

Dropbox использует размер и цветовой контраст, чтобы привлечь внимание пользователя к кнопке призыва к действию «Попробуйте Dropbox Business бесплатно»

Делайте кнопки удобными для пользователей мобильных телефонов

Во многих мобильных приложениях кнопки слишком малы. Из-за этого пользователи часто опечатываются.

Слева: Кнопки подходящего размера. Справа: Кнопки слишком мелкие. Изображение: Apple

Исследование MIT Touch Lab показало, что средние значения для подушечек пальцев составляют от 10 до 14 мм, а кончиков пальцев – 8-10 мм. Это делает квадрат 10 мм x 10 мм хорошим минимальным размером для зоны касания.

Изображение: uxmag

5. Позаботьтесь о порядке

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

Интерфейс – это разговор с вашими пользователями

Например, как упорядочить кнопки «Предыдущая / Следующая» в разбивке на страницы? Логично, что кнопка, которая перемещает вас вперед, должна быть справа, а кнопка, которая перемещает вас назад, должна быть слева.

6. Избегайте использования слишком большого количества кнопок

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

7. Обеспечение визуального или звукового фидбека при взаимодействии

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

Почему это происходит? Как люди, мы ожидаем определенную обратную связь после того, как мы взаимодействуем с объектом. Это может быть визуальный, звуковой или тактильный фидбек – все, что подтверждает факт взаимодействия.

Пользовательский интерфейс обеспечивает визуальный фидбек, который фиксирует нажатие кнопки. Изображение: Vadim Gromov

Для некоторых операций, таких как загрузка, стоит не только подтвердить ввод, но и показать текущее состояние процесса.

Эта кнопка преобразуется в индикатор прогресса, чтобы продемонстрировать текущее состояние операции. Изображение: Colin Garven

Вывод

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

Кнопки. Компоненты · Bootstrap. Версия v4.0.0

Используйте стили кнопок Bootstrap для взаимодействия с формами, диалогами, т.п. Имеется поддержка некоторых контекстуальных вариаций, размеров, состояний и т.п.

Примеры

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

Главный Вторичный Успех Опасность Предупреждение Инфо Светлый Темный Линк

<button type="button">Главный</button>
<button type="button">Вторичный</button>
<button type="button">Успех</button>
<button type="button">Опасность</button>
<button type="button">Предупреждение</button>
<button type="button">Инфо</button>
<button type="button">Светлый</button>
<button type="button">Темный</button>

<button type="button">Линк</button>
Использование вспомогательных технологий

Использование цвета как дополнительного инструмента информативности доступно только в визуальной сфере, что ограничивает пользователей вспомогательных технологий, например, программ для чтения текста с экрана. Удостоверьтесь, что информация, обозначенная цветом, также доступна из самого контента (т.е. в тексте) или содержится в альтернативных средствах – таких как дополнительный скрытый в классе .sr-only текст.

Классы .btn созданы для использования с элементом <button>. Однако их также можно использовать внутри <a> или <input> (хотя из-за этого некоторые браузеры могут рендерить это немного иначе).

При использовании классов .btn в элементах <a>, которые в данном случае используются не как линк, ведущий на новые страницы или как якорь, а как триггер внутристраничной функциональности (такой как сворачивание содержимого), необходимо задать этим <a> атрибут role="button" для правильного поведения в случае применения вспомогательных технологий таких как «экранная читалка».

<a href="#" role="button">Link</a>
<button type="submit">Button</button>
<input type="button" value="Input">
<input type="submit" value="Submit">
<input type="reset" value="Reset">

Контурные кнопки (без фона)

Нужна кнопка, но без «тяжелых» фоновых цветов? Замените дефолтные классы-модификаторы на классы .btn-outline-* для удаления всех фоновых изображений и цветов в любой кнопке.

Главный Вторичный Успех Опасность Предупреждение Инфо Светлый Темный

<button type="button">Главный</button>
<button type="button">Вторичный</button>
<button type="button">Успех</button>
<button type="button">Опасность</button>
<button type="button">Предупреждение</button>
<button type="button">Инфо</button>
<button type="button">Светлый</button>
<button type="button">Темный</button>

Размеры

Нужно изменить размеры кнопки? Добавьте в нее классы .btn-lg или .btn-sm для получения дополнительных размеров.

Большая кнопка Большая кнопка

<button type="button">Большая кнопка</button>
<button type="button">Большая кнопка</button>

Маленькая кнопка Маленькая кнопка

<button type="button">Маленькая кнопка</button>
<button type="button">Маленькая кнопка</button>

Создайте кнопки блочного уровня – которые занимают полную ширину родительского элемента – добавлением класса .btn-block.

Кнопка блочного уровня Кнопка блочного уровня

<button type="button">Кнопка блочного уровня</button>
<button type="button">Кнопка блочного уровня</button>

Активное состояние

Когда кнопки нажимают, появляется более темный фон, границы и внутренняя тень. В BS4 нет необходимости добавлять класс в <button>, т.к. тут используется псевдо-класс. Однако вы можете вызвать «активное» поведение и соответствующий внешний вид, добавив класс .active (и включив атрибут aria-pressed="true") , когда необходимо прямо объявить такое поведение.

<a href="#" role="button" aria-pressed="true">Главная ссылка</a>
<a href="#" role="button" aria-pressed="true">Ссылка</a>

«Отключенние» кнопки

Заставьте кнопки выглядеть «неактивными» добавлением булеанова атрибута disabled к любому элементу <button>.

Главная кнопка Кнопка

<button type="button" disabled>Главная кнопка</button>
<button type="button" disabled>Кнопка</button>

«Отключенные» кнопки, созданные из элемента <a>, ведут себя немного иначе:

  • Элемент <a> не поддерживает атрибут disabled, так что для соответствующих свойств вместо него надо добавлять класс .disabled;
  • Некоторые future-friendly стили, которые поддерживаются не всеми юзер-агентами, (т.е. «возможно будут поддерживаться в будущем») включены в <a> для отключения всех событий pointer-events на кнопках-якорях. В браузерах, которые поддерживают это свойство, вы вовсе не увидите деактивированный курсор.
  • Отключенные кнопки должны содержать атрибут aria-disabled="true" для указания вспомогательным технологиям состояния элемента.
<a href="#" role="button" aria-disabled="true">Главный линк</a>
<a href="#" role="button" aria-disabled="true">Линк</a>
Оговорка о некоторых аспектах функциональности ссылок

Класс .disabled использует pointer-events: none для попытки деактивации ссылочной функциональности <a>, но это свойство CSS еще не полностью стандартизовано. В дополнение, даже в браузерах, поддерживающих свойство pointer-events: none, при навигации с клавиатуры пользователи клавиатур для слабовидящих и иных вспомогательных технологий могут нечаянно пройти по данной ссылке. Так что для полной «безопасности» добавляйте в эти ссылки атрибут tabindex="-1" (для предотвращения возможности «нахождения» их с клавиатуры) и используйте обычные скрипты JavaScript для деактивации их функциональности.

Плагины кнопок

Контролируйте состояния кнопок или создавайте группы кнопок для компонентов, таких как «тулбары».

Переключение состояний

Добавьте data-toggle="button" для переключения на активное состояние кнопки. Если вы делаете это, вы должны вручную добавить в <button> класс .active и aria-pressed="true".

Одиночный переключатель

<button type="button" data-toggle="button" aria-pressed="false" autocomplete="off">
  Одиночный переключатель
</button>

Переключатели («галочки») и «кнопки радио»

Стили классов .button могут применяться к прочим элементам, таким как <label>, для создания переключателей («галочек») или «кнопок радио». Добавьте data-toggle="buttons" к классу .btn-group, содержащему эти измененные кнопки, для включения «переключателей» в их соответствующих стилях.

Состояние выбора (т.е. когда ставится «галочка») обновляется лишь событием клика click по кнопке. Если вы используете другой метод для обновления ввода – например <input type="reset"> или вручную применяя свойство ввода checked – вам потребуется вручную применить класс .active к <label>.

Заметьте, что кнопки с предустановленным выбором требуют вручную добавить класс .active к элементу ввода <label>.

<div data-toggle="buttons">
  <label>
    <input type="checkbox" checked autocomplete="off"> Checked
  </label>
</div>
<div data-toggle="buttons">
  <label>
    <input type="radio" name="options" autocomplete="off" checked> Active
  </label>
  <label>
    <input type="radio" name="options" autocomplete="off"> Radio
  </label>
  <label>
    <input type="radio" name="options" autocomplete="off"> Radio
  </label>
</div>

Методы

Метод Описание
$().button('toggle') Задействует состояние «нажатия». Дает кнопке вид активированной (нажатой) кнопки.
$().button('dispose') Уничтожает кнопку элемента (в элементе).

Пишем Telegram-ботов на Python (v2)

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

Обычные кнопки

Кнопки как шаблоны

Этот вид кнопок появился вместе с Bot API в далёком 2015 году и представляет собой не что иное, как шаблоны сообщений (за исключением нескольких особых случаев, но о них позже). Принцип простой: что написано на кнопке, то и будет отправлено в текущий чат. Соответственно, чтобы обработать нажатие такой кнопки, бот должен распознавать входящие текстовые сообщения.

Напишем хэндлер, который будет при нажатии на команду /start отправлять сообщение с двумя кнопками:

# from aiogram import types
@dp.message_handler(commands="start")
async def cmd_start(message: types.Message):
    keyboard = types.ReplyKeyboardMarkup()
    button_1 = types.KeyboardButton(text="С пюрешкой")
    keyboard.add(button_1)
    button_2 = "Без пюрешки"
    keyboard.add(button_2)
    await message.answer("Как подавать котлеты?", reply_markup=keyboard)

Обратите внимание, что т.к. обычные кнопки суть шаблоны сообщений, то их можно создавать не только как объекты KeyboardButton, но и как обычные строки.
Что ж, запустим бота и обалдеем от громадных кнопок:

Как-то некрасиво. Во-первых, хочется сделать кнопки поменьше, а во-вторых, расположить их горизонтально.
Почему вообще они такие большие? Дело в том, что по умолчанию «кнопочная» клавиатура должна занимать на смартфонах столько же места, сколько и обычная буквенная. Для уменьшения кнопок к объекту клавиатуры надо указать дополнительный параметр resize_keyboard=True.
Но как заменить вертикальные кнопки на горизонтальные? С точки зрения Bot API, клавиатура — это массив массивов кнопок, а если говорить проще, массив строк. Метод add() при каждом вызове создаёт новую строку (ряд) и принимает произвольное число аргументов по количеству желаемых кнопок в строке. Перепишем наш код, чтобы было красиво:

@dp.message_handler(commands="start")
async def cmd_start(message: types.Message):
    keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    buttons = ["С пюрешкой", "Без пюрешки"]
    keyboard.add(*buttons)
    await message.answer("Как подавать котлеты?", reply_markup=keyboard)

Обратите внимание на конструкцию *buttons. Здесь вам не C++ и звёздочка используется для распаковки списка. Подробнее об операторах * и ** можно прочитать здесь.

Смотрим — действительно красиво:

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

# from aiogram.dispatcher.filters import Text
@dp.message_handler(Text(equals="С пюрешкой"))
async def with_puree(message: types.Message):
    await message.reply("Отличный выбор!")


@dp.message_handler(lambda message: message.text == "Без пюрешки")
async def without_puree(message: types.Message):
    await message.reply("Так невкусно!")

Чтобы удалить кнопки, необходимо отправить новое сообщение со специальной «удаляющей» клавиатурой типа ReplyKeyboardRemove. Например: await message.reply("Отличный выбор!", reply_markup=types.ReplyKeyboardRemove())

У объекта обычной клавиатуры есть ещё две полезных опции: one_time_keyboard для скрытия кнопок после нажатия и selective для показа клавиатуры лишь некоторым участникам группы. Их использование остаётся для самостоятельного изучения.

Помимо стандартных опций, описанных выше, aiogram немного расширяет функциональность клавиатур параметром row_width. При его использовании, фреймворк автоматически разобьёт массив кнопок на строки по N элементов в каждой, где N — значение row_width, например, row_width=2. Попробуйте!

Специальные обычные кнопки

По состоянию на конец ужасного 2020 года в Telegram существует три специальных вида обычных кнопок, не являющихся шаблонами: для отправки текущей геолокации, для отправки своего номера телефона и ярлык для создания опроса/викторины. Для первых двух типов достаточно установить булевый флаг, а для опросов и викторин нужно передать специальный тип KeyboardButtonPollType и, по желанию, указать тип создаваемого объекта.

Впрочем, проще один раз увидеть код:

@dp.message_handler(commands="special_buttons")
async def cmd_special_buttons(message: types.Message):
    keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    keyboard.add(types.KeyboardButton(text="Запросить геолокацию", request_location=True))
    keyboard.add(types.KeyboardButton(text="Запросить контакт", request_contact=True))
    keyboard.add(types.KeyboardButton(text="Создать викторину",
                                      request_poll=types.KeyboardButtonPollType(type=types.PollType.QUIZ)))
    await message.answer("Выберите действие:", reply_markup=keyboard)

Инлайн-кнопки

URL-кнопки и колбэки

В отличие от обычных кнопок, инлайновые цепляются не к низу экрана, а к сообщению, с которым были отправлены. В этой главе мы рассмотрим два типа таких кнопок: URL и Callback. Ещё один — Switch — будет рассмотрен в главе про инлайн-режим.

Login- и Pay-кнопки в книге рассматриваться не будут вообще. Если у кого-то есть желание помочь хотя бы с рабочим кодом для авторизации или оплаты, пожалуйста, создайте Pull Request на GitHub. Спасибо!

Самые простые инлайн-кнопки относятся к типу URL, т.е. «ссылка». Поддерживаются только протоколы HTTP(S) и tg://

@dp.message_handler(commands="inline_url")
async def cmd_inline_url(message: types.Message):
    buttons = [
        types.InlineKeyboardButton(text="GitHub", url="https://github.com"),
        types.InlineKeyboardButton(text="Оф. канал Telegram", url="tg://resolve?domain=telegram")
    ]
    keyboard = types.InlineKeyboardMarkup(row_width=1)
    keyboard.add(*buttons)
    await message.answer("Кнопки-ссылки", reply_markup=keyboard)

А если хотите обе кнопки в ряд, то уберите row_width=1 (тогда будет использоваться значение по умолчанию 3).

С URL-кнопками больше обсуждать, по сути, нечего, поэтому перейдём к гвоздю сегодняшней программы — Callback-кнопкам. Это очень мощная штука, которую вы можете встретить практически везде. Кнопки-реакции у постов (лайки), меню у @BotFather и т.д. Суть в чём: у колбэк-кнопок есть специальное значение (data), по которому ваше приложение опознаёт, что нажато и что надо сделать. И выбор правильного data очень важен! Стоит также отметить, что, в отличие от обычных кнопок, нажатие на колбэк-кнопку позволяет сделать практически что угодно, от заказа пиццы до перезагрузки сервера.

Напишем хэндлер, который по команде /random будет отправлять сообщение с колбэк-кнопкой:

@dp.message_handler(commands="random")
async def cmd_random(message: types.Message):
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(types.InlineKeyboardButton(text="Нажми меня", callback_data="random_value"))
    await message.answer("Нажмите на кнопку, чтобы бот отправил число от 1 до 10", reply_markup=keyboard)

Но как же обработать нажатие? Если раньше мы использовали message_handler для обработки входящих сообщений, то теперь будем использовать callback_query_handler для обработки колбэков. Ориентироваться будем на «значение» кнопки, т.е. на её data:

@dp.callback_query_handler(text="random_value")
async def send_random_value(call: types.CallbackQuery):
    await call.message.answer(str(randint(1, 10)))

Важно

Несмотря на то, что параметр кнопки callback_data, а значение data лежит в одноимённом поле data объекта CallbackQuery, собственный фильтр aiogram называется text.

Ой, а что это за часики? Оказывается, сервер Telegram ждёт от нас подтверждения о доставке колбэка, иначе в течение 30 секунд будет показывать специальную иконку. Чтобы скрыть часики, нужно вызвать метод answer() у колбэка (или использовать метод API answer_callback_query()). В общем случае, в метод answer() можно ничего не передавать, но можно вызвать специальное окошко (всплывающее сверху или поверх экрана):

@dp.callback_query_handler(text="random_value")
async def send_random_value(call: types.CallbackQuery):
    await call.message.answer(str(randint(1, 10)))
    await call.answer(text="Спасибо, что воспользовались ботом!", show_alert=True)
    # или просто await call.answer()

Обратите внимание

В функции send_random_value мы вызывали метод answer() не у message, а у call.message. Это связано с тем, что колбэк-хэндлеры работают не с сообщениями (тип Message), а с колбэками (тип CallbackQuery), у которого другие поля, и само сообщение — всего лишь его часть. Учтите также, что message — это сообщение, к которому была прицеплена кнопка (т.е. отправитель такого сообщения — сам бот). Если хотите узнать, кто нажал на кнопку, смотрите поле from (в вашем коде это будет call.from_user, т.к. слово from зарезервировано в Python)

Когда вызывать answer()?

В общем случае, главное — просто не забыть сообщить Telegram о получении колбэк-запроса, но я рекомендую ставить вызов answer() в самом конце, и вот почему: если вдруг в процессе обработки колбэка случится какая-то ошибка и бот нарвётся на необработанное исключение, пользователь увидит неубирающиеся полминуты часики и поймёт, что что-то не так. В противном случае, часики исчезнут, а пользователь останется в неведении, выполнился его запрос успешно или нет.

Перейдём к примеру посложнее. Пусть пользователю предлагается сообщение с числом 0, а внизу три кнопки: +1, -1 и Подтвердить. Первыми двумя он может редактировать число, а последняя удаляет всю клавиатуру, фиксируя изменения. Хранить значения будем в памяти в словаре (про конечные автоматы поговорим как-нибудь в другой раз).

# Здесь хранятся пользовательские данные.
# Т.к. это словарь в памяти, то при перезапуске он очистится
user_data = {}

def get_keyboard():
    # Генерация клавиатуры.
    buttons = [
        types.InlineKeyboardButton(text="-1", callback_data="num_decr"),
        types.InlineKeyboardButton(text="+1", callback_data="num_incr"),
        types.InlineKeyboardButton(text="Подтвердить", callback_data="num_finish")
    ]
    # Благодаря row_width=2, в первом ряду будет две кнопки, а оставшаяся одна
    # уйдёт на следующую строку
    keyboard = types.InlineKeyboardMarkup(row_width=2)
    keyboard.add(*buttons)
    return keyboard

async def update_num_text(message: types.Message, new_value: int):
    # Общая функция для обновления текста с отправкой той же клавиатуры
    await message.edit_text(f"Укажите число: {new_value}", reply_markup=get_keyboard())

@dp.message_handler(commands="numbers")
async def cmd_numbers(message: types.Message):
    user_data[message.from_user.id] = 0
    await message.answer("Укажите число: 0", reply_markup=get_keyboard())

@dp.callback_query_handler(Text(startswith="num_"))
async def callbacks_num(call: types.CallbackQuery):
    # Получаем текущее значение для пользователя, либо считаем его равным 0
    user_value = user_data.get(call.from_user.id, 0)
    # Парсим строку и извлекаем действие, например `num_incr` -> `incr`
    action = call.data.split("_")[1]
    if action == "incr":
        user_data[call.from_user.id] = user_value+1
        await update_num_text(call.message, user_value+1)
    elif action == "decr":
        user_data[call.from_user.id] = user_value-1
        await update_num_text(call.message, user_value-1)
    elif action == "finish":
        # Если бы мы не меняли сообщение, то можно было бы просто удалить клавиатуру
        # вызовом await call.message.delete_reply_markup().
        # Но т.к. мы редактируем сообщение и не отправляем новую клавиатуру, 
        # то она будет удалена и так.
        await call.message.edit_text(f"Итого: {user_value}")
    # Не забываем отчитаться о получении колбэка
    await call.answer()

И, казалось бы, всё работает:

Но теперь представим, что ушлый пользователь сделал следующее: вызвал команду /numbers (значение 0), увеличил значение до 1, снова вызвал /numbers (значение сбросилось до 0) и отредактировал нажал кнопку «+1» на первом сообщении. Что произойдёт? Бот по-честному отправит запрос на редактирование текста со значением 1, но т.к. на том сообщении уже стоит цифра 1, то Bot API вернёт ошибку, что старый и новый тексты совпадают, а бот словит исключение: aiogram.utils.exceptions.MessageNotModified: Message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message

С этой ошибкой вы, скорее всего, будете поначалу часто сталкиваться, пытаясь редактировать сообщения. Но, в действительности, решается проблема очень просто: мы проигнорируем исключение MessageNotModified. Из первой главы вы уже знаете о такой прекрасной штуке, как errors_handler, но в этот раз мы поступим чуть иначе и перепишем функцию update_num_text() следующим образом:

# from aiogram.utils.exceptions import MessageNotModified
# from contextlib import suppress

async def update_num_text(message: types.Message, new_value: int):
    with suppress(MessageNotModified):
        await message.edit_text(f"Укажите число: {new_value}", reply_markup=get_keyboard())

Если теперь вы попробуете повторить пример выше, то указанное исключение в этом блоке кода бот просто-напросто проигнорирует.

Фабрика колбэков

В aiogram существует т.н. фабрика колбэков. Вы создаёте объект CallbackData, указываете ему префикс и произвольное количество доп. аргументов, которые в дальнейшем указываете при создании колбэка для кнопки.
Например, рассмотрим следующий объект:

# from aiogram.utils.callback_data import CallbackData
cb= CallbackData("post", "id", "action")
Тогда при создании кнопки вам надо указать её параметры так:
button =  types.InlineKeyboardButton(
    text="Лайкнуть", 
    callback_data=cb.new(id=5, action="like")
)

В примере выше в кнопку запишется callback_data, равный post:5:like, а хэндлер на префикс post будет выглядеть так:

@dp.callback_query_handler(cb.filter())
async def callbacks(call: types.CallbackQuery, callback_data: dict):
    post_id = callback_data["id"]
    action = callback_data["action"]

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

# fabnum - префикс, action - название аргумента, которым будем передавать значение
callback_numbers = CallbackData("fabnum", "action")


def get_keyboard_fab():
    buttons = [
        types.InlineKeyboardButton(text="-1", callback_data=callback_numbers.new(action="decr")),
        types.InlineKeyboardButton(text="+1", callback_data=callback_numbers.new(action="incr")),
        types.InlineKeyboardButton(text="Подтвердить", callback_data=callback_numbers.new(action="finish"))
    ]
    keyboard = types.InlineKeyboardMarkup(row_width=2)
    keyboard.add(*buttons)
    return keyboard


async def update_num_text_fab(message: types.Message, new_value: int):
    with suppress(MessageNotModified):
        await message.edit_text(f"Укажите число: {new_value}", reply_markup=get_keyboard_fab())


@dp.message_handler(commands="numbers_fab")
async def cmd_numbers(message: types.Message):
    user_data[message.from_user.id] = 0
    await message.answer("Укажите число: 0", reply_markup=get_keyboard_fab())


@dp.callback_query_handler(callback_numbers.filter(action=["incr", "decr"]))
async def callbacks_num_change_fab(call: types.CallbackQuery, callback_data: dict):
    user_value = user_data.get(call.from_user.id, 0)
    action = callback_data["action"]
    if action == "incr":
        user_data[call.from_user.id] = user_value + 1
        await update_num_text_fab(call.message, user_value + 1)
    elif action == "decr":
        user_data[call.from_user.id] = user_value - 1
        await update_num_text_fab(call.message, user_value - 1)
    await call.answer()


@dp.callback_query_handler(callback_numbers.filter(action=["finish"]))
async def callbacks_num_finish_fab(call: types.CallbackQuery):
    user_value = user_data.get(call.from_user.id, 0)
    await call.message.edit_text(f"Итого: {user_value}")
    await call.answer()

На этом глава про кнопки окончена, но про некоторые других их виды мы поговорим в следующих главах.

Шаблоны | Инструкция Moguta.CMS

← Интерфейс админки Валюта →

Вкладка «Шаблон» предназначена для быстрого редактирования файлов шаблона, прямо из панели управления сайтом. Также в данном разделе можно работать с изображения, расположенными в папке шаблона /images. Именно в этом разделе необходимо производить вставку шорткодов при подключении новых плагинов.

 Обзор настроек шаблона

  1. Панель классификации файлов шаблона —  в панели содержатся кнопки: «Шаблоны страниц«,  «Шаблоны блоков«,  «Шаблоны писем«, «Шаблоны печати«, «Шаблон лендинга«. При нажатии на одну из кнопок будут предложены для редактирования соответствующие файлы, отвечающие за тот или иной контент, например страниц сайта или содержания писем уведомлений;
  2. Панель кнопок — для перехода к редактируемому файлу шаблона магазина;
  3. Поле для редактирования файла — позволяет редактировать содержимое выбранного файла. Требует чтобы права на запись файла были открыты на сервере;
  4. Файловый менеджер — кнопка по клику на которую во встроенном файловом менеджере откроется папка с изображениями действующего шаблона;
  5. Кнопка настройки шаблона магазина;
  6. Кнопка настройки шаблона лендинга;
  7. Шаблон магазина — данное поле  задет внешний вид сайта, скачать шаблоны можно на официальном сайте . По умолчанию устанавливаются 2 стандартных шаблона Moguta.CMS – default и mg-default;
    Стандартные шаблоны обновляются вместе с системой, соответственно при обновлении движка все изменения сделанные в файлах шаблона сбрасываются. Поэтому, если вы собираетесь вносить доработки в файлы шаблона, например радактировать вёрстку или стили, сперва необходимо скопировать папку с шаблоном в /mg-templates и переименовать её в любое другое название, сделать это можно через файловый менеджер на вашем хостинге, либо с помощью FTP-клиента, например Filezilla;
  8. Смена цветовой схемы шаблона публичной части вашего интернет-магазина;
  9. Загрузка zip-архива с шаблоном. Также шаблон можно установить, просто разархивировав его в папку /mg-templates;

Шаблоны страниц

Вкладка «Шаблоны страниц» — предоставляет для редактирования основные файлы шаблона, предназначенные для формирования внешнего вида и содержания страниц сайта.

  • template.php —  «каркас» всего шаблона. Верстка, расположенная в этом файле будет выводиться на всех страницах сайта. В данном файле можно изменять позиционирование основных элементов шаблона таких как поиск, верхнее и/или левое меню, блок новостей, слайдер акций, а также добавлять новый элементы;
  • functions.php — файл предусмотрен для программирования особых задач для действующего шаблона сайта.  В данном файле можно использовать собственные обработчики, перехватывая функции движка аналогично работе плагинов; По умолчанию, в качестве примера, файл содержит код для управления заголовком title.
  • ajaxuser.php — предназначен для работы с базой данных сайта по средством AJAX запросов при разработке пользовательских функций;
  • 404.php — страница с информацией об ошибке, выводящаяся при переходе по несуществующему адресу.
  • style.css — файл содержит все CSS стили, которые используются элементами шаблона. Можно изменять все блоки CSS стилей, а также добавлять свои стили;
  • script.js — файл можно вставлять собственный JavaScript код для добавления дополнительных визуальных эффектов на сайт и инициализации Ajax запросов к базе;
  • catalog.php — формирует внешний вид страницы каталога товаров. Можно изменить расположение элементов каталога или скрыть неиспользуемые элементы;
  • enter.php — формирует внешний вид страницы для авторизации пользователя;
  • feedback.php — формирует внешний вид  формы обратной связи;
  • forgotpass.php — формирует внешний вид страницы для восстановления пароля;
  • index.php — формирует внешний вид главной страницы вашего сайта. Если включена опция «выводить каталог на главной странице», то за оформление главной страницы будет отвечать файл catalog.php
  • personal.php — формирует внешний вид страницы личного кабинета включая оформления раздела «История заказов».
  • product.php — формирует внешний вид страницы с подробной карточкой товара.
  • registration.php — формирует внешний вид страницы для регистрации нового пользователя;
  • order.php — формирует внешний вид страницы оформления заказа, которая выводится после нажатия кнопки «Оформить заказ» в корзине магазина;
  • compare.php — формирует внешний вид страницы сравнения товаров.;
  • group.php — формирует внешний вид страницы групп товаров.;
  • payment.php — страница оплаты, которая открывается после нажатия кнопки «Оформить заказ»;

Шаблоны блоков

Вкладка «Шаблоны блоков» раздел предназначен для изменить отображение отдельных элементов. Например, контактов в шапке сайта, блока вывода меню категорий каталога, внешний вид вариантов товаров.

  • layout_cart.php  — формирует область «корзины» на всех страницах сайта. Также в этом файле  формируются элементы всплывающей корзины (если она включена в настройках).
  • layout_contacts.php — формирует область  с контактной информацией интернет-магазина, заданной в настройках (телефон, email, название магазина). 
  • layout_compare.php — формирует внешний вид кнопки для добавления товаров к списку сравнения. Подключает необходимые скрипты для работы с механизмом сравнений.
  • layout_related.php — в данном файле формируется блок «С этим товаром покупают«, располагающийся в карточке товара
  • layout_search.php — формирует область для поиска товара по каталогу. Блок поиска товаров по сайту;
  • layout_topmenu.php — формирует внешний вид  меню с ссылками на страницы сайта.
  • layout_leftmenu.php — формирует внешний вид  меню с категориями каталога на страницы сайта. 
  • layout_images.php — формирует внешний вид  слайдера с изображениями товара в подробной карточке товара, также в этом файле подключается функционал увеличения изображения товара при наведении на него курсора мышки( если включено в настройках).
  • layout_auth.php — формирует внешний вид блока авторизации посетителя;
  • layout_contacts_mobile.php — формирует внешний вид с контактной информацией интернет-магазина, предназначенный для мобильной версии сайта;
  • layout_horizontmenu.php — формирует внешний вид   горизонтального меню, если оно включено; 
  • layout_property.php — в данном файле формируется блок с характеристиками товара и кнопка «Купить» для добавления товара из карточки в корзину.
  • layout_relatedcart.php — формирует внешний вид  блока «добавить в заказ похожие  товары», отображающийся на странице корзины. Отличается от layout_related.php тем, что имеет кнопку для быстрого добавления товара в корзину;
  • layout_subcategory.php — формирует внешний вид блока списка подкатегорий, выводящийся на страницах каталога;
  • layout_variant.php — формирует внешний вид блока вариантов товара;

Шаблоны писем

Вкладка «Шаблон писем» позволяет редактировать внешний вид писем-уведомлений, приходящих с сайта покупателям.

  • email_template.php — общий макет для отправки писем;
  • email_feedback.php — письмо с формой обратной связи;
  • email_forgot.php — письмо с информацией для восстановления пароля;
  • email_order.php — письмо об оформлении заказа в интернет-магазине;
  • email_registry.php — письмо с уведомлением о регистрации на сайте;
  • email_order_electro.php — письмо со ссылкой для скачивания электронного товара;
  • email_order_status.php — письмо с информацией об изменении статуса заказа;
  • email_unclockauth.php — письмо администратору сайта о том, что пользователь ввел неверный пароль указанное количество раз. В случае если эти действия были инициированы со стороны администратора, дается ссылка для снятия блокировки;

Шаблоны печати

Вкладка «Шаблон печати«. В данном разделе можно изменить формат печати заказа или квитанции.

  • print_order.php — форма счета, выставляемого для юридических лиц.
  • print_qittance.php — форма счета, выставляемого для физических лиц.

Изображения шаблона

Вкладка  «Графика«. Предоставляет файловый менеджер, позволяющий работать с изображениями расположенными в папке /images шаблона.

Урок 5. Клавиатуры и кнопки · Telegram бот на Python 3 и aiogram

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

Не забывайте своевременно обновлять библиотеку командой python3.6 -m pip install aiogram -U! Урок проводится с использованием версии 1.2.3

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

Для начала стоит понять, в чем основное различие
ReplyKeyboardMarkup и InlineKeyboardMarkup:

ReplyKeyboardMarkup — это шаблоны сообщений. К примеру, ваш бот задаёт пользователю вопрос и предлагает варианты ответа. Пользователь может самостоятельно напечатать ответ, либо нажать на готовую кнопку. Такая клавиатура показывается вместо основной и не привязана ни к какому сообщению. В кнопки такой клавиатуры нельзя заложить никакой информации, нельзя запрограммировать для неё подобный если пользователь нажимает кнопку с текстом «abc» отправить текст «qwerty» алгоритм, отправлено будет только то, что написано на кнопке (есть два исключения, о которых ниже).

InlineKeyboardMarkup — это уже настоящая кастомная клавиатура. С её помощью мы можем выполнять более сложные действия. Она привязывается к сообщению, с которым была отправлена. В кнопки можно заложить любой текст размером от 1 до 64 байт (будьте осторожны, недобросовестные клиенты позволяют изменять эти данные). Инлайн кнопки позволяют скрыть в себе внутреннюю телеграм ссылку, ссылку на внешний ресурс, а также шорткат для инлайн запроса (об инлайн режиме в одном из следующих уроков).

И ту и другую клавиатуру можно редактировать, но разными способами. Первая обновляется при отправке сообщения с новой клавиатурой типа ReplyKeyboardMarkup, вторую можно редактировать вместе с сообщением, к которому она прикреплена (или только саму разметку).

Переходим к коду

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

В первую очередь импортируем необходимые нам модули и создаём первую клавиатуру:

from aiogram.types import ReplyKeyboardRemove, \
    ReplyKeyboardMarkup, KeyboardButton, \
    InlineKeyboardMarkup, InlineKeyboardButton

button_hi = KeyboardButton('Привет! 👋')

greet_kb = ReplyKeyboardMarkup()
greet_kb.add(button_hi)

При инициализации класса KeyboardButton необходимо передать один обязательный параметр — текст, который пользователь будет отправлять по нажатию на эту кнопку. У объекта класса ReplyKeyboardMarkup есть несколько методов, позволяющих добавить кнопку, в данном случае мы используем add. Таким образом мы получили первую готовую клавиатуру.

Создаём обработчик, который будет отправлять нам сообщение и наш шаблон (напомню, что отправить отдельно клавиатуру никак нельзя, она является параметром к сообщению).

@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
    await message.reply("Привет!", reply_markup=kb.greet_kb)

Запускаем и проверяем:

Отлично, клавиатура появилась! Но эта одна кнопка с маленьким текстом занимает очень много места. Телеграм позволяет автоматически уменьшить размер, для этого необходимо передать в инициализатор класса ReplyKeyboardMarkup параметру resize_keyboard значение True. Создадим новую клавиатуру:

greet_kb1 = ReplyKeyboardMarkup(resize_keyboard=True).add(button_hi)

Мы передали параметр в инициализатор и следом сразу добавили уже существующую кнопку. Отправляем новую версию клавиатуры:

@dp.message_handler(commands=['hi1'])
async def process_hi1_command(message: types.Message):
    await message.reply("Первое - изменяем размер клавиатуры", reply_markup=kb.greet_kb1)

Очевидно, так как у нас нет обработчика обычных сообщений, текст, отправляемый нажатием на эту кнопку, остаётся без ответа. При желании можно добавить функцию эхо из первого урока. А что ещё можно было заметить при использовании этой кнопки? Что она остаётся всё там же, даже если мы после нажатия хотели бы вернуться к привычной клавиатуре. Да, нажать одну кнопку, чтобы переключиться, не сложно. Но если клавиатура в принципе не подразумевает повторного нажатия прямо сейчас? И для этого тоже есть решение:


greet_kb2 = ReplyKeyboardMarkup(
    resize_keyboard=True, one_time_keyboard=True
).add(button_hi)


@dp.message_handler(commands=['hi2'])
async def process_hi2_command(message: types.Message):
    await message.reply("Второе - прячем клавиатуру после одного нажатия", reply_markup=kb.greet_kb2)

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

Добавляем больше кнопок

Рассмотрим подробно работу встроенных методов для создания более сложных клавиатур, а именно row, insert и add. Создаём кнопки, которые мы сможем использовать повторно и генерируем несколько разных клавиатур:

button1 = KeyboardButton('1️⃣')
button2 = KeyboardButton('2️⃣')
button3 = KeyboardButton('3️⃣')

markup3 = ReplyKeyboardMarkup().add(
    button1).add(button2).add(button3)

markup4 = ReplyKeyboardMarkup().row(
    button1, button2, button3
)

markup5 = ReplyKeyboardMarkup().row(
    button1, button2, button3
).add(KeyboardButton('Средний ряд'))

button4 = KeyboardButton('4️⃣')
button5 = KeyboardButton('5️⃣')
button6 = KeyboardButton('6️⃣')
markup5.row(button4, button5)
markup5.insert(button6)

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

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

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

@dp.message_handler(commands=['hi3'])
async def process_hi3_command(message: types.Message):
    await message.reply("Третье - добавляем больше кнопок", reply_markup=kb.markup3)

@dp.message_handler(commands=['hi4'])
async def process_hi4_command(message: types.Message):
    await message.reply("Четвертое - расставляем кнопки в ряд", reply_markup=kb.markup4)

@dp.message_handler(commands=['hi5'])
async def process_hi5_command(message: types.Message):
    await message.reply("Пятое - добавляем ряды кнопок", reply_markup=kb.markup5)

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

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


markup_request = ReplyKeyboardMarkup(resize_keyboard=True).add(
    KeyboardButton('Отправить свой контакт ☎️', request_contact=True)
).add(
    KeyboardButton('Отправить свою локацию 🗺️', request_location=True)
)


@dp.message_handler(commands=['hi6'])
async def process_hi6_command(message: types.Message):
    await message.reply("Шестое - запрашиваем контакт и геолокацию\nЭти две кнопки не зависят друг от друга", reply_markup=kb.markup_request)

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

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


markup_big = ReplyKeyboardMarkup()

markup_big.add(
    button1, button2, button3, button4, button5, button6
)
markup_big.row(
    button1, button2, button3, button4, button5, button6
)

markup_big.row(button4, button2)
markup_big.add(button3, button2)
markup_big.insert(button1)
markup_big.insert(button6)
markup_big.insert(KeyboardButton('9️⃣'))


@dp.message_handler(commands=['hi7'])
async def process_hi7_command(message: types.Message):
    await message.reply("Седьмое - все методы вместе", reply_markup=kb.markup_big)

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

@dp.message_handler(commands=['rm'])
async def process_rm_command(message: types.Message):
    await message.reply("Убираем шаблоны сообщений", reply_markup=kb.ReplyKeyboardRemove())

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

Инлайн клавиатуры

Теперь перейдем к инлайн клавиатурам. Они имеют больше параметров, поэтому позволяют нам делать больше разных вещей. Самое популярное использование — как кнопка, являющаяся шорткатом для какого-то действия. То есть «если пользователь нажал кнопку X, сделать Y». И под Y можно понимать вообще что угодно, так как это уже не ограничивается даже API. Рассмотрим наглядно, для этого передадим в инициализатор значение callback_data:


inline_btn_1 = InlineKeyboardButton('Первая кнопка!', callback_data='button1')
inline_kb1 = InlineKeyboardMarkup().add(inline_btn_1)


@dp.message_handler(commands=['1'])
async def process_command_1(message: types.Message):
    await message.reply("Первая инлайн кнопка", reply_markup=kb.inline_kb1)

Нажимаем кнопку и.. ничего не происходит! Почему? Если у бота было включено логгирование, то вы могли заметить, что приходит обновление типа CallbackQuery. Так вот именно его нам и нужно отлавливать. Добавляем нужный хэндлер (я предпочитаю ставить их выше, но относительно хэндлеров обычных сообщений значения это не имеет):

@dp.callback_query_handler(func=lambda c: c.data == 'button1')
async def process_callback_button1(callback_query: types.CallbackQuery):
    await bot.answer_callback_query(callback_query.id)
    await bot.send_message(callback_query.from_user.id, 'Нажата первая кнопка!')

Здесь мы делаем проверку прямо в хэндлере. Аргумент func ожидает функцию, которая принимает один параметр (туда передаётся апдейт), и хэндлер срабатывает, если возвращается истина. Этот аргумент можно использовать и в других хэндлерах, мы уже использовали его в уроке по FSM.

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

Хорошим тоном будет отвечать на все колбеки — для этого есть метод answerCallbackQuery. В документации сказано, что ответ ожидается клиентом, и дать его нужно обязательно, даже если вы не собираетесь передавать что-либо. Этого времени предостаточно, чтобы собрать необходимые данные и прислать их. При этом во время ожидания на кнопке будут крутиться часики, показывающие, то клиент ждёт ответа, поэтому если мы не хотим, чтобы пользователь наблюдал их, то нужно не забывать отвечать. Обязательный аргумент — айди запроса, на который мы отвечаем. Остальные параметры рассмотрим ниже. А в данном случае мы для наглядности отправим сообщение с информацией о том, что нажата первая кнопка. Запускаем снова, жмём кнопку и таки получаем ответ:

В этот раз установим ширину клавиатуры 2 и посмотрим, что будет.
Ну и так как методы добавления новых элементов мы уже разобрали, добавим сразу все доступные кнопки и отправим получившуюся клавиатуру, не забыв добавить хэндлер кнопок:


inline_kb_full = InlineKeyboardMarkup(row_width=2).add(inline_btn_1)
inline_kb_full.add(InlineKeyboardButton('Вторая кнопка', callback_data='btn2'))
inline_btn_3 = InlineKeyboardButton('кнопка 3', callback_data='btn3')
inline_btn_4 = InlineKeyboardButton('кнопка 4', callback_data='btn4')
inline_btn_5 = InlineKeyboardButton('кнопка 5', callback_data='btn5')
inline_kb_full.add(inline_btn_3, inline_btn_4, inline_btn_5)
inline_kb_full.row(inline_btn_3, inline_btn_4, inline_btn_5)
inline_kb_full.insert(InlineKeyboardButton("query=''", switch_inline_query=''))
inline_kb_full.insert(InlineKeyboardButton("query='qwerty'", switch_inline_query='qwerty'))
inline_kb_full.insert(InlineKeyboardButton("Inline в этом же чате", switch_inline_query_current_chat='wasd'))
inline_kb_full.add(InlineKeyboardButton('Уроки aiogram', url='https://surik00.gitbooks.io/aiogram-lessons/content/'))


@dp.callback_query_handler(func=lambda c: c.data and c.data.startswith('btn'))
async def process_callback_kb1btn1(callback_query: types.CallbackQuery):
    code = callback_query.data[-1]
    if code.isdigit():
        code = int(code)
    if code == 2:
        await bot.answer_callback_query(callback_query.id, text='Нажата вторая кнопка')
    elif code == 5:
        await bot.answer_callback_query(
            callback_query.id,
            text='Нажата кнопка с номером 5.\nА этот текст может быть длиной до 200 символов 😉', show_alert=True)
    else:
        await bot.answer_callback_query(callback_query.id)
    await bot.send_message(callback_query.from_user.id, f'Нажата инлайн кнопка! code={code}')

@dp.message_handler(commands=['2'])
async def process_command_2(message: types.Message):
    await message.reply("Отправляю все возможные кнопки", reply_markup=kb.inline_kb_full)

Пройдёмся по строчкам по порядку, чтобы не осталось вопросов:

  • мы создаём клавиатуру типа InlineKeyboardMarkup, указываем, что ширина строки должна быть не больше двух (напомню, что это не распространяется на метод row) и сразу добавляем туда уже готовую кнопку
  • далее добавляем кнопку, у которой указываем другие данные в параметре callback_data
  • следом генерируем три новые кнопки и добавляем их дважды. Сначала методом add, затем через row. И так как ширина клавиатуры равна двум, то в первом случае происходит перенос третьей кнопки, во втором случае нет
  • затем добавляем кнопки, у которых указываем уже не callback_data, а другие параметры. То, что мы добавим в switch_inline_query, будет автоматически использовано при нажатии кнопки: пользователю предложат выбрать чат, а там вызовется инлайн режим этого бота (в поле ввода сообщения добавится юзернейм бота), следом через пробел будет прописано то, что мы указали. Параметр может принимать пустую строку, тогда инлайн режим запустится без какого-либо запроса, но если будет указан текст, то он и добавится
  • при использовании switch_inline_query_current_chat произойдёт ровно то же, что и в предыдущем пункте, но без выбора чата, а запустится в текущем (было сложно догадаться по названию, я знаю)
  • ну и последний параметр url — добавляем ссылку на внешний ресурс, либо диплинк в самом Телеграме

Так как параметр клавиатуры row_width равен двум, то кнопки автоматически расставились соответствующе. Рассмотрим реакцию на кнопки по порядку: При нажатии первой срабатывает наш первый колбек, так как не важно, в какую клавиатуру добавлена кнопка, важно, какая у неё callback_data ☝️. Поэтому добавлять инлайн кнопку можно сколько угодно раз в любые инлайн клавиатуры.

Кнопки со второй по пятую имеют схожую структуру в callback_data, поэтому внутри хэндлера проверяем, какой код у нажатой кнопки и:

  • если 2, то отвечаем на запрос и передаем информационное сообщение. Аргумент text это текст ответа на запрос. По умолчанию он будет показан вверху чата и сам скроется через пару секунд.
  • если 5, то отвечаем так же, но указываем show_alert=True, таким образом мы сообщаем клиенту, что нужно показать окошко с текстом
  • в ином случае просто отвечаем на колбек

И во всех случаях шлем сообщение пользователю:

Ещё можно отправить кнопку с игрой или платежом, но первое мы разберем в одном из следующих уроков, а о втором я уже упоминал в одном из предыдущих. При ответе на колбек можно ещё передать в ответ ссылку формата t.me/your_bot?start=XXXX, чтобы пользователь запустил вашего бота с определенным параметром, но диплинкинг мы тоже оставим для другого урока, так как здесь только о кнопках.

На последок не забываем добавить обработку команы /help и запускаем:

help_message = text(
    "Это урок по клавиатурам.",
    "Доступные команды:\n",
    "/start - приветствие",
    "\nШаблоны клавиатур:",
    "/hi1 - авто размер",
    "/hi2 - скрыть после нажатия",
    "/hi3 - больше кнопок",
    "/hi4 - кнопки в ряд",
    "/hi5 - больше рядов",
    "/hi6 - запрос локации и номера телефона",
    "/hi7 - все методы"
    "/rm - убрать шаблоны",
    "\nИнлайн клавиатуры:",
    "/1 - первая кнопка",
    "/2 - сразу много кнопок",
    sep="\n"
)


@dp.message_handler(commands=['help'])
async def process_help_command(message: types.Message):
    await message.reply(help_message)


if __name__ == '__main__':
    executor.start_polling(dp)

Вот и всё!

В этом уроке мы разобрали как работать с клавиатурами в Телеграм

бесплатных шаблонов для изготовления пуговиц для машин для создания пуговиц Photoshop — American Button Machines

Мы предоставили наши шаблоны кнопок ниже, чтобы помочь вам в создании кнопок pinback. Просто воссоздайте шаблоны в выбранном вами программном пакете и начните создавать свои кнопки.

Бесплатные шаблоны создания кнопок для Photoshop

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

Шаблон Photoshop для 1-дюймовых кнопок

Шаблон Photoshop для кнопок 1,25 дюйма

Шаблон Photoshop для 1,5-дюймовых кнопок

Шаблон Photoshop для кнопок 1,75 дюйма

Шаблон Photoshop для кнопок 2,25 дюйма

Шаблон Photoshop для 3-дюймовых кнопок

Шаблон Photoshop для кнопок 3,5 дюйма

Видеоурок по Photoshop — Как создать кнопку

Полный лист шаблонов кнопок включает слоганы.

НОВИНКА: По многочисленным просьбам мы добавили размеры для настройки линий тегов в вашей собственной программе графического дизайна. Строки тегов позволяют разместить вашу контактную информацию на обратной стороне кнопки. Нажмите на размер кнопки ниже, чтобы загрузить один из наших бесплатных шаблонов для создания кнопок в формате PDF с вашим выбором с ключевыми словами или без них.

Круглые шаблоны Слоганы Квадратные / Алмазные шаблоны Шаблоны прямоугольников Круглые шаблоны Badge-a-Minit
1.00 «Круглый шаблон 1,00 «TaglineTemplate Квадратный шаблон 1,50 x 1,50 дюйма Прямоугольник, 1,75 x 2,75 дюйма Круглый шаблон 2,25 дюйма — BAM
Круглый шаблон 1,25 дюйма 1,25-дюймовый шаблон слогана Квадратный шаблон 2,0 x 2,0 дюйма Шаблон прямоугольника 2,00 x 3,00 дюйма Круглый шаблон 3,00 дюйма — BAM
Круглый шаблон 1,50 дюйма 1.50-дюймовый шаблон слогана Фото шаблон 2,00 «x 3,00»
Круглый шаблон 1,75 дюйма 1,75-дюймовый шаблон слогана Шаблон прямоугольника 2,50 x 3,50 дюйма
Круглый шаблон 2,00 дюйма 2,25-дюймовый шаблон слогана
Круглый шаблон 2,25 дюйма 3,00 «шаблон слогана
2.50-дюймовый круглый шаблон 3,50-дюймовый шаблон слогана
Круглый шаблон 3,00 дюйма 6,00 «Шаблон слогана
Круглый шаблон 3,50 дюйма
Круглый шаблон 4,00 дюйма
Круглый шаблон 6,00 «
СохранитьСохранитьСохранитьСохранить

Программное обеспечение Build-a-Button Design от American Button Machines.

Возникли проблемы с использованием шаблонов для создания кнопок? Наш онлайн-центр дизайна Build-a-Button так же прост в использовании, как и текстовый редактор.

Нужны дополнительные шаблоны? Ознакомьтесь с нашими бесплатными шаблонами создания кнопок для Photoshop, Print Shop и Open Office.

Просмотрите видео ниже, чтобы узнать, насколько просто использовать программное обеспечение Build-a-Button.

Видеоурок по созданию кнопки — Как создать кнопку

Сохранить

СохранитьСохранить

бесплатных шаблонов для создания пуговиц Open Office от ABM — American Button Machines

Ищете бесплатные шаблоны для создания кнопок? Мы предоставили наши шаблоны создания кнопок Open Office ниже, чтобы помочь вам в создании кнопок обратной связи.

Слышали ли вы об Open Office раньше? Это программное обеспечение с открытым исходным кодом для графики, презентаций, обработки текста и многого другого. Многие люди используют его для бесплатного программного обеспечения для создания кнопок, и вы можете бесплатно скачать его с их веб-сайтов.

Бесплатные шаблоны для создания кнопок для Open Office

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

Шаблон Open Office для кнопок размером 1 дюйм

Шаблон Open Office для кнопок 1,25 дюйма

Шаблон Open Office для кнопок 1,5 дюйма

Шаблон Open Office для кнопок 1,75 дюйма

Шаблон Open Office для кнопок 2,25 дюйма

Шаблон Open Office для 3-дюймовых кнопок

Шаблон Open Office для кнопок 3,5 дюйма

Шаблон Open Office для 6-дюймовых кнопок

Видеоурок по

Open Office — Как создать кнопку

Полный лист шаблонов для создания кнопок PDF включает слоганы.

НОВИНКА: По многочисленным просьбам мы добавили размеры для настройки линий тегов в вашей собственной программе графического дизайна. Строки тегов позволяют разместить вашу контактную информацию на обратной стороне кнопки. Нажмите на размер кнопки ниже, чтобы загрузить один из наших бесплатных шаблонов для создания кнопок в формате PDF с вашим выбором с ключевыми словами или без них.

Круглые шаблоны Слоганы Квадратные / Алмазные шаблоны Шаблоны прямоугольников Круглые шаблоны Badge-a-Minit
1.00 «Круглый шаблон 1,00 «TaglineTemplate Квадратный шаблон 1,50 x 1,50 дюйма Прямоугольник, 1,75 x 2,75 дюйма Круглый шаблон 2,25 дюйма — BAM
Круглый шаблон 1,25 дюйма 1,25-дюймовый шаблон слогана Квадратный шаблон 2,0 x 2,0 дюйма Шаблон прямоугольника 2,00 x 3,00 дюйма Круглый шаблон 3,00 дюйма — BAM
Круглый шаблон 1,50 дюйма 1.50-дюймовый шаблон слогана Фото шаблон 2,00 «x 3,00»
Круглый шаблон 1,75 дюйма 1,75-дюймовый шаблон слогана Шаблон прямоугольника 2,50 x 3,50 дюйма
Круглый шаблон 2,00 дюйма 2,25-дюймовый шаблон слогана
Круглый шаблон 2,25 дюйма 3,00 «шаблон слогана
2.50-дюймовый круглый шаблон 3,50-дюймовый шаблон слогана
Круглый шаблон 3,00 дюйма 6,00 «Шаблон слогана
Круглый шаблон 3,50 дюйма
Круглый шаблон 4,00 дюйма
Круглый шаблон 6,00 «
СохранитьСохранитьСохранитьСохранить

Сохранить

СохранитьСохранить

Программное обеспечение Build-a-Button Design от American Button Machines.

Возникли проблемы с использованием шаблонов для создания кнопок? Наш онлайн-центр дизайна Build-a-Button так же прост в использовании, как и текстовый редактор.

Нужны дополнительные шаблоны? Ознакомьтесь с нашими бесплатными шаблонами создания кнопок для Photoshop, Print Shop и Open Office.

Просмотрите видео ниже, чтобы узнать, насколько просто использовать программное обеспечение Build-a-Button.

Видеоурок по созданию кнопки — Как создать кнопку

бесплатных шаблонов для создания кнопок для CorelDraw — American Button Machines

Ищете бесплатные шаблоны для создания кнопок? Ниже мы предоставили наши шаблоны Corel Draw, специально предназначенные для создания кнопок.Приведенные ниже шаблоны создания кнопок помогут вам в создании кнопок pinback.

Слышали ли вы о Corel Draw раньше? Это программное обеспечение профессионального уровня для работы с векторной графикой. Многие люди используют его для программного обеспечения для создания кнопок, и вы можете бесплатно скачать демоверсию с их веб-сайта.

Ниже вы найдете бесплатные шаблоны для создания кнопок для программы Corel Draw. При нажатии на ссылки ниже начнется загрузка файла .cdr, который можно использовать в качестве шаблона для создания дизайна кнопок в CorelDraw.

Бесплатные шаблоны создания кнопок CorelDraw

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

Шаблон Corel Draw для 1-дюймовой кнопки

Шаблон Corel Draw для кнопки 1,25 дюйма

Шаблон Corel Draw для кнопки 1,5 дюйма

Шаблон Corel Draw для 1.Кнопка 75 дюймов

Шаблон Corel Draw для кнопки 2,25 дюйма

Шаблон Corel Draw для 3-дюймовой кнопки

Шаблон Corel Draw для кнопки 3,5 дюйма

Шаблон Corel Draw для 6-дюймовой кнопки

Обучающее видео по Corel Draw — Как создать кнопку

Полный лист шаблонов для создания кнопок PDF, включая слоганы.

НОВИНКА: По многочисленным просьбам мы добавили размеры для настройки линий тегов в вашей собственной программе графического дизайна. Строки тегов позволяют разместить вашу контактную информацию на обратной стороне кнопки. Нажмите на размер кнопки ниже, чтобы загрузить один из наших бесплатных шаблонов для создания кнопок в формате PDF с вашим выбором с ключевыми словами или без них.

СохранитьСохранитьСохранитьСохранить

Программное обеспечение Build-a-Button Design от American Button Machines.

Возникли проблемы с использованием шаблонов для создания кнопок? Наш онлайн-центр дизайна Build-a-Button так же прост в использовании, как и текстовый редактор.

Нужны дополнительные шаблоны? Ознакомьтесь с нашими бесплатными шаблонами создания кнопок для Photoshop, Print Shop и Open Office.

Просмотрите видео ниже, чтобы узнать, насколько просто использовать программное обеспечение Build-a-Button.

Видеоурок по созданию кнопки — Как создать кнопку

пользовательских шаблонов кнопок | Все любят кнопки Buttons®

Пользовательские шаблоны кнопок | Все любят кнопки®

Магазин не будет работать корректно, если куки отключены.

У нас есть шаблоны для всех наших продуктов. Получите шаблоны и инструкции ниже

Эти шаблоны можно использовать для пользовательских пуговиц, магнитов для одежды, магнитных пуговиц для холодильников, застежек-молний® и многого другого.

Как пользоваться шаблонами?

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

  1. Сохраните шаблон кнопки на свой компьютер (щелкните правой кнопкой мыши размер шаблона и выберите «Сохранить цель как»).
  2. Откройте шаблон в графическом редакторе, например Adobe Illustrator, Adobe InDesign или Adobe Photoshop.
  3. Используйте линию выпуска за обрез (синяя линия), чтобы установить цвет фона или обрезать фоновое изображение до нужных размеров.
  4. Установите желаемое изображение на лицевой стороне кнопки внутри красной пунктирной линии.
  5. Создайте свое искусство на основе шаблона, сохраните и загрузите файл через форму заказа на нашем веб-сайте.

Возникли проблемы с шаблоном? Позвоните нам по телефону 623-445-9975 или напишите в наш художественный отдел по адресу: [email protected]

Похоже, в вашем браузере отключен JavaScript. Для наилучшего взаимодействия с нашим сайтом обязательно включите Javascript в своем браузере.

шаблонов дизайна кнопок — People Power Press для пользовательских кнопок, производителей пуговиц, кнопочных машин и деталей кнопок и штифтов

Пожалуйста, прочтите перед тем, как начать!

  • Создавайте изображения с разрешением 300 точек на дюйм в формате CMYK и работайте непосредственно с шаблоном (НЕ помещайте и не копируйте шаблон в новый файл)
  • Перед сохранением обведите или сведите все текстовые слои так, чтобы все используемые шрифты были сохранены
  • Мы принимаем файлы, сохраненные в форматах PDF, TIFF, JPG, AI или PSD.
  • Ваша работа должна поместиться в «Области иллюстраций» и убедитесь, что слой «Линии разреза» включен.
  • Фон дизайна должен выходить за пределы внутренних линий до внешней синей «Линии отреза».Это гарантирует, что ваша работа будет обернута вокруг края кнопки и не закончится незадолго до
  • .
  • Если вы хотите, чтобы текст был на краю кнопки, он должен помещаться между двумя пунктирными направляющими линиями
  • Отключите или удалите слой «ШАБЛОН» перед отправкой рисунка (пурпурная линия «Область рисунка» не должна быть видна).
  • При печати в домашних условиях масштабируйте на 100% (не «по размеру страницы»)
  • Шаблон PDF совместим с большинством программ. Используйте шаблон PSD для Photoshop и шаблон AI для Illustrator.

Теперь о шаблонах:

Круглый

Площадь

Бриллиант

Прямоугольник (по горизонтали)

  • Прямоугольник 2-1 / 2 «x 3-1 / 2»

  • Прямоугольник 1-1 / 2 x 4-1 / 2 дюйма

Прямоугольник (вертикальный)

  • Прямоугольник 2-1 / 2 x 3-1 / 2 дюйма

  • Прямоугольник 1-1 / 2 x 4-1 / 2 дюйма

Другие размеры

  • 1-3 / 4 «x 2-3 / 4» горизонт.Округлый прямоугольник.

  • 1-3 / 4 «x 2-3 / 4» Верт. Округлый прямоугольник.

  • 1-3 / 4 «x 2-3 / 4» Горизонтальный овал

  • 1-3 / 4 «x 2-3 / 4» Вертикальный овал

Некоторые ресурсы для создания изображения кнопок

The Button Guy Online Button Designer — это простая и БЕСПЛАТНАЯ программа для начинающих дизайнеров и производителей пуговиц, не имеющих формальных навыков проектирования и обучения.Это бесплатно. Сохраните свои дизайны в своей учетной записи и распечатайте и печатайте из дома.

Загрузите и распечатайте черно-белый лист с разнообразными кнопками размером 2,25 дюйма. Затем раскрасьте вручную, нажмите дома или принесите в наш магазин в Торонто и сделайте там!

Инструменты дизайна

Видеоуроки


шаблонов бизнес-сообщений WhatsApp — шаблон кнопки ответа

Обзор

В сообщениях WhatsApp Business сообщение кнопки ответа имеет следующую структуру:

  1. Заголовок (необязательно)
  2. Название
  3. Субтитры
  4. Нижний колонтитул (необязательно)
  5. Кнопки (от 1 до 3)

Примеры кнопки ответа в WhatsApp:

Кнопка ответа

Кнопка «Ответить» — это контейнер, содержащий информацию, которая должна отображаться коннектором.

Недвижимость
Название свойства Описание Тип Требуется
тип Тип контейнера.
Для кнопок ответа в WhatsApp тип всегда должен быть по вертикали , так как он лучше всего представляет макет на стороне клиента.
Enum Я
тег Тег представления шаблона должен быть общим . Enum Я
элементы Массив элементов / шаблонов, который содержит фактическое содержимое кнопки ответа. Элементы должны располагаться в следующем порядке:

1) Изображение
2) Заголовок
3) Подзаголовок
4) Нижний колонтитул
5-7) Кнопка

Требуются описание и хотя бы один элемент кнопки.

Массив (элемент) Я
Представительская карта JSON
  {
  "тип": "вертикальный",
  "тег": "общий",
  «элементы»: [Изображение, Заголовок, Описание, Кнопка, Кнопка, Кнопка]
}
  

Изображение

Изображение, которое будет отображаться в верхней части кнопки «Ответить».

Недвижимость
Название свойства Описание Тип Требуется
тип Должен быть «имидж». Определяет элемент как объект типа image. Enum Я
url URL-адрес изображения, которое будет отправлено в Facebook.
Домен, в котором хранится изображение, должен быть внесен в белый список, прежде чем его можно будет использовать.
Строка Я
Представление JSON
  {
  "тип": "изображение",
  "url": "https://d1hryyr5hiabsc.cloudfront.net/web2020/img/resources/[email protected]"
}
  

Название

Выделенный заголовок богатой карты.

Недвижимость
Название свойства Описание Тип Требуется
тип Должен быть «текст».Определяет элемент как объект типа text. Enum Я
тег Должен быть «заголовок». Если он отсутствует, первый текстовый элемент в шаблоне будет установлен как текст карточки. Enum Я
текст Фактический текст заголовка.
Текст не может быть длиннее 1024 символов, совместно используемых с субтитрами.
Строка Я
Представление JSON
  {
  "тип": "текст",
  "тег": "название",
  "text": "Большой разрыв ИИ"
}
  

Субтитры

Текст богатой карты.

Недвижимость
Название свойства Описание Тип Требуется
тип Должен быть «текст». Определяет элемент как объект типа text. Enum Я
тег Должен быть «сутитл». Если отсутствует первый текстовый элемент в шаблоне, он будет установлен как текст карточки. Enum Я
текст Текст описания.
Текст не может быть длиннее 1024 символов, общих с заголовком.
Строка Я

Нижний колонтитул карты.

Недвижимость
Название свойства Описание Тип Требуется
тип Должен быть «текст». Определяет элемент как объект типа text. Enum Я
тег Должен быть нижним колонтитулом. Enum Я
текст Текст описания.
Текст не может быть длиннее 60 символов вместе с заголовком.
Строка Я
Представление JSON
  {
  "тип": "текст",
  "text": "Будет обработано в течение 1 рабочего дня",
  "тег": "нижний колонтитул"
},
  

Кнопка

Кнопка внизу богатой карты.

Недвижимость
Название свойства Описание Тип Требуется
тип Должна быть «кнопка».Определяет элемент как объект типа button. Enum Я
название Текст кнопки.
Текст не может быть длиннее 25 символов.
Строка Я
нажмите Операции щелчка, которые должны выполняться, когда покупатель нажимает кнопку.
Эти операции щелчка должны содержать хотя бы одно действие. WhatsApp поддерживает только publishText
ClickOperations Я
  {
  "тип": "кнопка",
  "title": "Повторить попытку того же адреса",
  "щелчок": ClickOperations
}
  

Полный шаблон

  {
  "тип": "вертикальный",
  "тег": "общий",
  "элементы": [
    {
      "тип": "изображение",
      "url": "https: // d1hryyr5hiabsc.cloudfront.net/web2020/img/resources/[email protected] "
    },
    {
      "тип": "текст",
      "text": "Обновление доставки пакета",
      "тег": "название"
    },
    {
      "тип": "текст",
      "text": "Привет! Не удалось доставить вашу посылку 16 августа 2021 года. Выберите желаемое место доставки.",
      «тег»: «подзаголовок»
    },
    {
      "тип": "текст",
      "text": "Будет обработано в течение 1 рабочего дня",
      "тег": "нижний колонтитул"
    },
    {
      "тип": "кнопка",
      "title": "Повторить попытку того же адреса",
      "click": {
        "действия": [
          {
            "тип": "publishText",
            "text": "Повторить тот же адрес"
          }
        ]
      }
    },
    {
      "тип": "кнопка",
      "title": "Пункт выдачи",
      "click": {
        "действия": [
          {
            "тип": "publishText",
            "text": "Пункт выдачи"
          }
        ]
      }
    },
    {
      "тип": "кнопка",
      "title": "Доставить на почту",
      "click": {
        "действия": [
          {
            "тип": "publishText",
            "текст": "Почтовое отделение"
          }
        ]
      }
    }
  ]
}
  
Руководство и шаблоны по изготовлению пуговиц

— Makerspace

Рекомендации и шаблоны по изготовлению пуговиц — Makerspace — Колумбийский колледж Чикаго
  • Рекомендации и шаблоны для изготовления пуговиц

  • Индивидуальные студенты могут делать до 50 кнопок за семестр
  • Признанные студенческие организации могут создавать до 150 кнопок за семестр
  • Если у вас есть большая группа людей, которые собираются сделать кнопки, напишите в Makerspace по адресу makerspace @ colum.edu с предложенной датой и временем, чтобы мы могли помочь вам
  • Вы не можете продавать пуговицы, сделанные из материалов Makerspace. Если вы планируете продавать свои пуговицы, вы можете использовать производителей пуговиц Makerspace, но вы должны предоставить свои собственные материалы.

Инструкции по изготовлению кнопки Makerspace:

  • Скачайте шаблон под размер кнопок, который вы хотите сделать (ссылки на шаблон ниже)
  • Обратите особое внимание на размеры в шаблоне и соответственно измените размер изображений.Изображения и текст, попадающие в пунктирный круг, появятся на передней части кнопки; пространство между внутренней пунктирной линией и внешней сплошной линией будет загибаться к задней части кнопки.
  • Размер шаблонов кнопок составляет 8,5 x 11 дюймов. Если вы измените размер этой страницы, изображения ваших кнопок будут неправильного размера.
  • Вариант 1 для настройки шаблона: инструкции Adobe InDesign
  • Вариант 2 для настройки вашего шаблона: инструкции Adobe Photoshop
  • Вариант 3 для настройки вашего шаблона: распечатайте шаблон кнопки и нарисуйте свой собственный дизайн прямо на шаблоне!
  • Распечатайте готовые шаблоны пуговиц на обычной бумаге для принтера (карточки слишком толстые для производителей пуговиц)
  • Используйте кружки Makerspace, чтобы вырезать изображения кнопок; это гарантирует, что они идеального размера для наших производителей пуговиц
  • Персонал Makerspace проинструктирует вас, как использовать устройства для изготовления пуговиц

Шаблоны кнопок:

Шаблон кнопки 1 ”

1.

alexxlab

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

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