由于我的应用程序具有许多屏幕,并且几乎已经完成了构建前端的工作,因此我不想更改屏幕管理器(<root widget>:
)和class MainApp(MDApp):
。请帮助我如何在不更改代码布局的情况下在主屏幕上按包装重量按钮添加MDDropdownMenu。不仅下面提到的代码,而且我尝试了不同的方法来实现它,但是遇到了很多错误。请帮忙,谢谢。
我的main.py文件
from kivymd.app import MDApp
import json
from datetime import datetime
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.image import Image
from kivy.uix.behaviors import ButtonBehavior
from kivymd.uix.button import MDFlatButton ,MDRectangleFlatIconButton
from kivymd.uix.label import MDLabel, MDIcon
from kivymd.uix.textfield import MDTextField
from kivymd.uix.dialog import MDDialog
from kivymd.uix.list import OneLineListItem
from kivy.core.window import Window
from kivymd.uix.menu import MDDropdownMenu, MDMenuItem
class HomeScreen(Screen):
def drop(self):
self.dropdown= MDDropdownMenu(items= {"viewclass": "MDMenuItem","text":"option1"}, width_mult=4)
self.dropdown.open()
class RootWidget(ScreenManager):
pass
class MainApp(MDApp):
def build(self):
self.theme_cls.primary_palette= "Green"
return RootWidget()
if __name__ == "__main__":
MainApp().run()
我的design.kv文件
<HomeScreen>:
GridLayout:
cols: 1
padding: 20, 20
spacing: 10,10
size_hint: 1,0.87
MDRectangleFlatIconButton:
icon: 'weight-kilogram'
text: "Package weight"
size_hint: (0.55,1)
on_press: root.drop()
<RootWidget>:
HomeScreen:
name: "home_screen"
这是我的应用主屏幕的图像
答案 0 :(得分:0)
您需要在spacy>=2.1.0,<2.2.0
调用中加入spacy==2.1.0
,并且caller
应该是词典列表。
尝试将MDDropdownMenu()
更改为items
包含kv
:
id
MDRectangleFlatIconButton
用于标识<HomeScreen>:
GridLayout:
cols: 1
padding: 20, 20
spacing: 10,10
size_hint: 1,0.87
MDRectangleFlatIconButton:
id: caller # ADDED
icon: 'weight-kilogram'
text: "Package weight"
size_hint: (0.55,1)
on_press: root.drop()
。
然后使用id
方法创建caller
,而DropDown
方法仅打开on_kv_post()
:
drop()
在执行DropDown
规则之后执行class HomeScreen(Screen):
def on_kv_post(self, base_widget):
caller = self.ids.caller
self.dropdown = MDDropdownMenu(caller=caller, items=[{"viewclass": "MDMenuItem", "text": "option1"}], width_mult=4)
def drop(self):
self.dropdown.open()
方法,以便on_kv_post()
可用。
未按照documentation的建议在kv
方法中创建ids
。