Как создать кнопку, при нажатии на которую появятся две другие?
Создаётся приложение на python с использованием kivy. Как добавить кнопку, при нажатии на которую, появится список из двух других кнопок? Приложение содержит ScreenManager с четырьмя экранами. Кнопка должна находится на одном из них. Её название в .kv файле ‘Количество каналов’ Вот файл main.py
from kivy.app import App from kivy.uix.button import Button from kivy.uix.dropdown import DropDown from kivy.base import runTouchApp from kivy.uix.boxlayout import BoxLayout from kivy.uix.floatlayout import FloatLayout from kivy.lang import Builder from kivy.uix.screenmanager import ScreenManager, Screen from bluetuz import GetData, SendData class EegScreen(Screen): pass choose_channels = DropDown() class SettingsScreen(Screen): pass class ExchangeScreen(Screen): pass #FloatLayout class ConnectionsScreen(Screen): pass class MyApp(App): pass if __name__ == '__main__': MyApp().run()
BoxLayout: orientation: 'vertical' ScreenManager: id: screen_manager EegScreen: id: eeg_screen name:'EegScreen' SettingsScreen: id: settings_screen name:'SettingsScreen' ExchangeScreen: id: exchange_screen name:'ExchangeScreen' ConnectionsScreen: id: connections_screen name:'ConnectionsScreen' BoxLayout: orientation: 'horizontal' padding: '40dp' spacing: '40dp' Button: text: 'Подключения' font_size: 15 size_hint:0.15, 0.18 on_release: screen_manager.current = 'ConnectionsScreen' Button: text: 'Команды' font_size: 15 size_hint:0.15, 0.18 on_release: screen_manager.current = 'ExchangeScreen' Button: text: 'ЭЭГ сигналы' font_size: 15 size_hint:0.15, 0.18 on_release: screen_manager.current = 'EegScreen' Button: text: 'Настройки' font_size: 15 size_hint:0.15, 0.18 on_release: screen_manager.current = 'SettingsScreen' : FloatLayout: Label: text: 'EEG Signals' pos_hint: : FloatLayout: Label: text: 'Настройки' pos_hint: Button: size_hint:0.2, 0.18 pos_hint: text: 'Количество каналов' : FloatLayout: Label: text: 'Exchange' pos_hint: : FloatLayout: Label: text: 'Connections' pos_hint: Button: size_hint:0.18, 0.18 pos_hint: text: 'поиск усилителя' on_release: self.text = 'вылазит список' Button: size_hint:0.18, 0.18 pos_hint: text: 'поиск протеза' on_release: self.text = 'шото ищет'
Как создать кнопку в python
Одним из наиболее используемых компонентов в графических программах является кнопка. В tkinter кнопки представлены классом Button . Основные параметры виджета Button:
- command : функция, которая вызывается при нажатии на кнопку
- compund : устанавливает расположение картинки и текста относительно друг друга
- cursor : курсор указателя мыши при наведении на метку
- image : ссылка на изображение, которое отображается на метке
- pading : отступы от границ вилжета до его текста
- state : состояние кнопки
- text : устанавливает текст метки
- textvariable : устанавливает привязку к элементу StringVar
- underline : указывает на номер символа в тексте кнопки, который подчеркивается. По умолчанию значение -1, то есть никакой символ не подчеркивается
- width : ширина виджета
Добавим в окно обычную кнопку из пакета ttk:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") # стандартная кнопка btn = ttk.Button(text="Button") btn.pack() root.mainloop()
Для создания кнопки используется конструктор Button() . В этом конструкторе с помощью параметра text можно установить текст кнопки.
Чтобы разместить виджет в контейнере (главном окне), у него вызывается метод pack() . На ОС Windows мы получим следующую кнопку:
Конструктор Button определяет различные параметры, которые позволяют настроить поведение и внешний вид кнопки. Однако конкретный набор параметров зависит от того, используем ли мы кнопки из пакета tkinter или из пакета tkinter.ttk.
Обработка нажатия на кнопку
Для обработки нажатия на кнопку необходимо установить в конструкторе параметр command , присвоив ему ссылку на функцию, которая будет срабатывать при нажатии:
from tkinter import * from tkinter import ttk clicks = 0 def click_button(): global clicks clicks += 1 # изменяем текст на кнопке btn["text"] = f"Clicks " root = Tk() root.title("METANIT.COM") root.geometry("250x150") btn = ttk.Button(text="Click Me", command=click_button) btn.pack() root.mainloop()
Здесь в качестве обработчика нажатия устанавливается функция click_button. В этой функции изменяется глобальная переменная clicks, которая хранит число кликов. Кроме того, изменяем текст кнопки, чтобы визуально было видно сколько нажатий произведено. Таким образом, при каждом нажатии кнопки будет срабатывать функция click_button, и количество кликов будет увеличиваться:

Отключение кнопки
Для ttk-кнопки мы можем установить отключенное состояние с помощью метода state() , передав ему значение «disabled». С такой кнопкой пользователь не сможет взаимодействовать:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") btn = ttk.Button(text="Click Me", state=["disabled"]) btn.pack() root.mainloop()
При этом в метод state мы можем передать набор состояний, поэтому значение «disabled» передается внутри списка.
Виджет кнопки Button Tkinter в Python
Виджет Button Tkinter в Python используется для добавления различных типов кнопок в приложение Python. Python позволяет нам настроить внешний вид кнопки в соответствии с нашими требованиями. В зависимости от требований можно установить или сбросить различные параметры.
Мы также можем связать метод или функцию с кнопкой, которая вызывается при ее нажатии.
Синтаксис использования виджета кнопки:
W = Button(parent, options)
Список возможных вариантов виджета приведен ниже.
| № | Вариант | Описание |
|---|---|---|
| 1 | activebackground | Представляет собой фон кнопки при наведении курсора мыши на кнопку. |
| 2 | activeforeground | Цвет шрифта кнопки при наведении курсора мыши на кнопку. |
| 3 | Bd | Представляет ширину границы в пикселях. |
| 4 | Bg | Цвет фона кнопки. |
| 5 | Command | Установлена на вызов функции, который запланирован. |
| 6 | Fg | Цвет переднего плана кнопки. |
| 7 | Font | Шрифт текста кнопки. |
| 8 | Height | Высота кнопки. Высота представлена количеством текстовых строк для текстовых строк или количеством пикселей для изображений. |
| 10 | Highlightcolor | Цвет выделения, когда кнопка находится в фокусе. |
| 11 | Image | Отвечает за изображение, отображаемое на кнопке. |
| 12 | justify | Иллюстрирует способ представления нескольких текстовых строк. Для него установлено значение ВЛЕВО для выравнивания по левому краю, ВПРАВО для выравнивания по правому краю и ЦЕНТР для выравнивания по центру. |
| 13 | Padx | Дополнительный отступ к кнопке по горизонтали. |
| 14 | pady | Дополнительный отступ к кнопке по вертикали. |
| 15 | Relief | Представляет собой тип границы. Это может быть SUNKEN, RAISED, GROOVE и RIDGE. |
| 16 | State | Для этого параметра установлено значение DISABLED, чтобы кнопка не реагировала. ACTIVE представляет активное состояние кнопки. |
| 17 | Underline | Установите этот параметр, чтобы сделать текст кнопки подчеркнутым. |
| 18 | Width | Ширина кнопки. Представлена количеством букв для текстовых кнопок или пикселей для кнопок с изображениями. |
| 19 | Wraplength | Если значение установлено на положительное число, текстовые строки будут перенесены, чтобы соответствовать этой длине. |
Пример 1
#python application to create a simple button from tkinter import * top = Tk() top.geometry("200x100") b = Button(top,text = "Simple") b.pack() top.mainaloop()

Пример 2
from tkinter import * top = Tk() top.geometry("200x100") def fun(): messagebox.showinfo("Hello", "Red Button clicked") b1 = Button(top,text = "Red",command = fun,activeforeground = "red",activebackground = "pink",pady=10) b2 = Button(top, text = "Blue",activeforeground = "blue",activebackground = "pink",pady=10) b3 = Button(top, text = "Green",activeforeground = "green",activebackground = "pink",pady = 10) b4 = Button(top, text = "Yellow",activeforeground = "yellow",activebackground = "pink",pady = 10) b1.pack(side = LEFT) b2.pack(side = RIGHT) b3.pack(side = TOP) b4.pack(side = BOTTOM) top.mainloop()
Создание надстройки Python в виде кнопки
Кнопка — это наиболее простой вид изменения функциональности, она может быть использована для выполнения бизнес-логики при нажатии.
Этот раздел поможет вам создать новую кнопку на новой панели инструментов, используя мастер надстроек Python . Прежде, чем начать этот процесс, убедитесь, что вы создали проект надстройки ArcMap и указали параметры проекта. Более подробная информация доступна в разделе Создание проекта надстройки. Хотя здесь демонстрируется процесс создания кнопки для ArcMap, таким же образом вы можете добавить кнопку в любое другое приложение ArcGIS Desktop . В этом разделе будет рассмотрен процесс создания простой кнопки для приближения к выбранным объектам. После этого класс Python, созданный мастером надстроек, будет рассмотрен более подробно с целью исследовать свойства и методы, которые обеспечивают функциональность вашей кнопки.
Создание надстройки в виде кнопки состоит из следующих этапов:
- Создание панели инструментов или меню После того, как вы ввели все необходимые настройки проекта, нажмите на закладку Содержимое надстройки (Add-In Contents) и определите функциональность, которую изменит ваша надстройка. Кнопка может находиться на панели инструментов или в меню. В этом примере будет создана новая панель инструментов, которая будет выступать в качестве контейнера для кнопки. Более подробная информация о создании собственной панели инструментов доступна в разделе Создание надстройки в виде панели инструментов.
- Создание кнопки После того, как вы ввели настройки панели инструментов, вы можете создать новую кнопку. Нажмите правой кнопкой мыши на панели инструментов под названием «Toolbar» и выберите Новая кнопка (New Button) .
Кнопка имеет ряд параметров, которые необходимо ввести. Ниже представлен список всех параметров с описанием каждого из них. Эти свойства сохраняются в файле config.xml вашего проекта.
Свойство Описание Название (обязательный) Определяет название кнопки. Следующая иллюстрация показывает, как название используется в менеджере надстроек ArcGIS для определения доступных видов изменения функционала (тип надстройки обозначен в скобках):
Следующая иллюстрация показывает, как название используется в качестве текстовой метки, которая позволяет найти кнопку на панели инструментов. 
Класс (обязательный) Класс Python, который выполняется при нажатии на кнопку в настольном приложении. Вся бизнес-логика вашей кнопки находится в классе Python. При создании своего класса используйте способ наименования, принятый в Python, при котором каждое слово начинается с большой буквы (например, «ZoomToSelectedFeatures», а не «zoomtoselectedfeatures»). ID (обязательный) Уникальное название, которое поможет идентифицировать кнопку. Вы можете создать более одной кнопки в проекте, и этот идентификатор позволит вам отличать кнопки друг от друга. Желательно заменить идентификатор по умолчанию на более понятное значение. Идентификатор не должен содержать пробелов. Вы можете использовать символ подчеркивания для того, чтобы соединять слова. Нельзя использовать ключевые слова Python. Список зарезервированных слов доступен в документации Python. Всплывающая подсказка (дополнительный) Краткое описание, которое появляется, когда курсор мыши оказывается над кнопкой в приложении. Сообщение (дополнительный) Подробное описание того, какие функции выполняет кнопка. Это сообщение появляется под всплывающей подсказкой (ToolTip), когда курсор мыши оказывается над кнопкой. Изображение (дополнительный) Здесь может быть изображение размером 16 х 16 пикселей, обозначающее вашу кнопку. Изображение должно быть в одном из популярных форматов (то есть .bmp , .jpg и так далее). Изображение будет скопировано в папку Images, созданную в проекте надстройки. Последняя секция настроек кнопки — это заголовок и содержание справки. Эти свойства позволяют вам предоставить информацию, которая отобразится, когда пользователь запустит контекстно-зависимую справку. Контекстно-зависимая справка представляет собой всплывающие сообщения, которые остаются на экране, пока пользователь не нажмет на другой объект. Секция контекстно-зависимой справки состоит из следующих параметров:
Свойство Описание Заголовок (дополнительный) Описывает тематику раздела справки. Содержание (дополнительный) Как только вы установили все параметры, нажмите на кнопку Сохранить (Save) в нижней части мастера. Все необходимые файлы и папки будут созданы в вашей рабочей папке.
- Редактирование скрипта Python На этом этапе вы должны закончить вводить значения для параметров, которые определяют надстройку в виде кнопки. Следующим шагом является редактирование скрипта Python и обновление класса Python для того, чтобы он включал функциональность по приближению выбранных объектов. Если не будет выбрано никаких объектов, будет отображен весь экстент всех слоев. Для добавления функциональности к пользовательской кнопке выполните следующие шаги:
- Отредактируйте скрипт Python, находящийся в папке Install , расположенной в рабочей папке, которую вы создали при помощи мастера. В скрипте будет находиться класс с названием, которое вы указали в параметре Class выше. Не изменяйте название этого класса, поскольку это название содержится в файле config.xml . Описание каждой функции и каждого свойства класса доступно в разделе Класс кнопки.
- Добавьте следующий код в функцию onClick(self) . Этот код добавляет функциональность, которая позволяет приближать выбранные объекты.
# Implementation of OnClick method of Button's class def onClick(self): # Get the current map document and the first data frame. mxd = arcpy.mapping.MapDocument('current') df = arcpy.mapping.ListDataFrames(mxd)[0] # Call the zoomToSelectedFeatures() method of the data frame class df.zoomToSelectedFeatures()
