#python #kivy #kivymd
#python #kivy #kivymd
Вопрос:
Я пытаюсь создать приложение. При нажатии кнопки в правом нижнем углу экрана появляется диалоговое окно (всплывающее окно). Я хочу создать новую кнопку на главном экране при нажатии кнопки «Готово».
Я полагал, что кнопка будет отображаться так, как при нажатии кнопки «Готово» вызывается метод close_dialog «close_dialog», и этот метод впоследствии вызывает метод «new_window». Не могли бы вы рассказать мне, почему код не работает и как это исправить. Спасибо.
Code .py:
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 kivy.uix.floatlayout import FloatLayout
from kivy.uix.scrollview import ScrollView
from kivymd.uix.button import MDFlatButton
from kivymd.uix.dialog import MDDialog
from kivymd.uix.textfield import MDTextField
Window.size = (240, 426)
class ContentNavigationDrawer(BoxLayout):
pass
class Content(BoxLayout):
pass
class Container(BoxLayout):
dialog = None
button_amount = 1
def show_dialog(self):
if not self.dialog:
self.dialog = MDDialog(
title="Create new group",
type="custom",
content_cls=Content(),
)
self.dialog.open()
def close_dialog(self, *args):
self.dialog.dismiss()
self.new_window()
def new_window(self, *args):
self.add_widget(
MDFlatButton(text="New group", size_hint_y=None, height=100))
class testApp(MDApp, Container):
def build(self):
return Container()
if __name__ == '__main__':
testApp().run()
Code .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"
MDFlatButton:
id: btn1
text: "Done"
text_color: self.theme_cls.primary_color
on_release: app.close_dialog()
<Container>
orientation: "vertical"
Screen:
MDFloatingActionButton:
pos_hint: {'right': 0.95, 'y': 0.05}
theme_text_color: "Custom"
text_color: app.theme_cls.primary_color
on_release:
app.show_dialog()
NavigationLayout:
ScreenManager:
Screen:
BoxLayout:
orientation: 'vertical'
MDToolbar:
size_hint: 1, 0.15
title: "Navigation Drawer"
elevation: 10
left_action_items: [['menu', lambda x: nav_drawer.toggle_nav_drawer()]]
Widget:
MDNavigationDrawer:
id: nav_drawer
ContentNavigationDrawer:
Ответ №1:
Во-первых, кнопка Done
, на которую она не нажимается, потому dialog
что она автоматически отключается, прежде чем вы сможете ее щелкнуть. Поэтому измените свой диалог на:
self.dialog = MDDialog(
title="Create new group",
type="custom",
content_cls=Content(),
auto_dismiss=False
)
Затем вам нужно указать своему приложению, куда вы хотите вставить виджет. В настоящее время вы пытаетесь поместить ее в класс App, и это не сработает. В этом примере я помещаю ее в главное окно, но вы можете изменить ее в зависимости от того, где вы хотите:
def new_window(self, *args):
btn = MDFlatButton(text="New group", size_hint_y=None, height=100)
self.root.add_widget(btn)