Создание новой кнопки при нажатии кнопки. (python, kivyMD)
Всем привет. Делаю приложение на kivyMD. Хочу сделать так, чтобы по нажатию на плюсик, а затем при нажатии кнопки "Done" на экране появлялась кнопка. Мой вариант не работает, но и не выдает ошибку. Подскажите, пожалуйста, как исправить так, чтобы по нажатию создавались новые кнопки.
from kivy.lang import Builder
from kivy.core.window import Window
from kivymd.app import MDApp
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivymd.uix.label import MDLabel
from kivy.uix.gridlayout import GridLayout
from kivymd.uix.button import MDFlatButton
from kivymd.uix.dialog import MDDialog
from kivymd.uix.textfield import MDTextField
Window.size = (240, 426)
KV = '''
<Content>
orientation: "vertical"
spacing: "12dp"
size_hint_y: None
height: "120dp"
MDCheckbox:
hint_text: "Online"
size_hint: (None, None)
active: True
pos_hint: {'center_x': .5, 'center_y': .4}
MDTextField:
hint_text: "Group name"
Screen:
MDFloatingActionButton:
pos_hint: {'right': 0.95, 'y': 0.05}
icon: "icon.png"
theme_text_color: "Custom"
text_color: app.theme_cls.primary_color
on_release:
app.show_alert_dialog()
NavigationLayout:
ScreenManager:
Screen:
BoxLayout:
orientation: 'vertical'
MDToolbar:
title: "Navigation Drawer"
elevation: 10
left_action_items: [['menu', lambda x: nav_drawer.toggle_nav_drawer()]]
Widget:
MDNavigationDrawer:
id: nav_drawer
ContentNavigationDrawer:
'''
class ContentNavigationDrawer(BoxLayout):
pass
class Content(BoxLayout):
pass
class Container(MDApp, Button):
dialog = None
def new_window(self, *args):
#метод по созданию новой группы
self.grid.add_widget(
Button(text="Новая группа", size_hint_y=None, height=100)
)
def build(self):
self.grid = GridLayout(cols=1, size_hint_y=None)
return Builder.load_string(KV)
def show_alert_dialog(self):
if not self.dialog:
self.dialog = MDDialog(
title="Create new group",
type="custom",
content_cls=Content(),
buttons=[
MDFlatButton(
text="Done", text_color=self.theme_cls.primary_color,
on_release=self.new_window
)
]
)
self.dialog.open()
Container().run()
Ответы (2 шт):
Какую ошибку получаешь? Попробуй кнопки диалога определить в kv файле. Очищай то куда ты там добавляешь и добавляй по нажатию кнопки: on_press:app.new_window() on_release: app.show_alert_dialog()
Закрытие диалогового окна
def callback(self, *args):
self.dialog.dismiss()
Для начала сделай функцию закрытия окна. Потом добавляй виджет в то место, куда хочешь. Если есть необходимость очистить место, то очищай .clear_widgets() а потом добавляй. Можешь вставить лойаут и добавлять в него.