python - 如何在按下按钮时构建 MDDropdownMenu 及其项目?
问题描述
由于我的应用程序有很多屏幕并且几乎完成了前端的构建,我不想更改屏幕管理器(<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"
这是我的应用主屏幕的图像
解决方案
您需要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()
方法在kv
规则执行后执行,因此ids
可用。
MDDropdownMenu
没有按照文档drop()
中的建议在方法中创建。
推荐阅读
- react-native - React Native Redux - 将动态属性添加到按钮的 TextBox OnClick
- jenkins - 詹金斯选择参数化分支结帐管道
- css - CSS 计算显示 text-align: center 已应用,但在 html 输出中的结果不同
- flutter - flutter_charts 包有 API 参考吗?
- rest - 如何使用 Jersey 为两个上传的输入文本文件处理 REST 中的两个不同文本文件?
- html - 我想在一个 div 中添加两个两个 div
- nlp - 基于规则的命名实体识别器,没有词性标签或任何其他信息
- javascript - 用 JavaScript 中的空格替换空格
- c# - 正确旋转图像
- python - 访问 numpy 数组的相邻单元格