如何通过在弹出窗口中按下按钮来创建新按钮 (python kivy)
How to create a new button by pressing a button in popup (python kivy)
我正在尝试制作一个应用程序。单击屏幕右下角的按钮,会出现一个对话框 window(弹出窗口)。我想在主屏幕上点击“完成”创建一个新按钮。
我相信这个按钮会出现在“完成”点击“close_dialog”方法被调用,然后这个方法调用“new_window”方法。你能告诉我为什么代码不起作用以及如何修复它吗?谢谢
代码.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()
代码.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:
首先,按钮 Done
没有被点击,因为 dialog
在您点击它之前会自动关闭。所以将对话框更改为:
self.dialog = MDDialog(
title="Create new group",
type="custom",
content_cls=Content(),
auto_dismiss=False
)
然后你需要告诉你的应用程序你想插入小部件的位置。目前您正在尝试将它放在应用程序 class 上,但它不起作用。在这个例子中我把它放在主要的window,但是你可以根据自己的需要改变:
def new_window(self, *args):
btn = MDFlatButton(text="New group", size_hint_y=None, height=100)
self.root.add_widget(btn)
我正在尝试制作一个应用程序。单击屏幕右下角的按钮,会出现一个对话框 window(弹出窗口)。我想在主屏幕上点击“完成”创建一个新按钮。
我相信这个按钮会出现在“完成”点击“close_dialog”方法被调用,然后这个方法调用“new_window”方法。你能告诉我为什么代码不起作用以及如何修复它吗?谢谢
代码.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()
代码.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:
首先,按钮 Done
没有被点击,因为 dialog
在您点击它之前会自动关闭。所以将对话框更改为:
self.dialog = MDDialog(
title="Create new group",
type="custom",
content_cls=Content(),
auto_dismiss=False
)
然后你需要告诉你的应用程序你想插入小部件的位置。目前您正在尝试将它放在应用程序 class 上,但它不起作用。在这个例子中我把它放在主要的window,但是你可以根据自己的需要改变:
def new_window(self, *args):
btn = MDFlatButton(text="New group", size_hint_y=None, height=100)
self.root.add_widget(btn)