Как создать кнопку, при нажатии на которую появятся две другие?

Рейтинг: 0Ответов: 1Опубликовано: 03.04.2023

Создаётся приложение на 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()

Файл .kv:

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'





<EegScreen>:
    FloatLayout:
        Label:
            text: 'EEG Signals'
            pos_hint:{'center_x':0.5,'center_y':0.9}




<SettingsScreen>:
    FloatLayout:
        Label:
            text: 'Настройки'
            pos_hint:{'center_x':0.5,'center_y':0.9}
        Button:
            size_hint:0.2, 0.18
            pos_hint:{'center_x':0.5,'y':0.2}
            text: 'Количество каналов'

<ExchangeScreen>:
    FloatLayout:
        Label:
            text: 'Exchange'
            pos_hint:{'center_x':0.5,'center_y':0.9}

<ConnectionsScreen>:
    FloatLayout:
        Label:
            text: 'Connections'
            pos_hint:{'center_x':0.5,'center_y':0.9}
        Button:
            size_hint:0.18, 0.18
            pos_hint:{'center_x':0.5,'y':0.2}
            text: 'поиск усилителя'
            on_release:
                self.text = 'вылазит список'
        Button:
            size_hint:0.18, 0.18
            pos_hint:{'center_x':0.5,'y':0.4}
            text: 'поиск протеза'
            on_release:
                self.text = 'шото ищет'

Ответы

▲ 0

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

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

Builder.load_string("""
<MainScreen>:
    BoxLayout:
        orientation: 'horizontal'
        Button:
            text: 'Show/Hide'
            on_press: root.show_hide() 
        BoxLayout:
            orientation: 'vertical'
            Button:     
                id: but1
                text: 'Button 1'
            Button:
                id: but2
                text: 'Button 2'            
""")

class MainScreen(Screen):

    def show_hide(self):
        if self.ids.but1.opacity:
            self.ids.but1.opacity = 0
            self.ids.but2.opacity = 0
        else:
            self.ids.but1.opacity = 1
            self.ids.but2.opacity = 1

class TestApp(App):

    def build(self):
        sm = ScreenManager()   
        sm.add_widget(MenuScreen(name='Main Screen'))
        return sm        

if __name__ == '__main__':
    TestApp().run()

Запускайте и пробуйте