gpt4 book ai didi

python - 从 KivyMD 中的 MDDropdownMenu 更改 2 个按钮的文本

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:29 24 4
gpt4 key购买 nike

我在从 MDDropdownMenu 单击 MDMenuItem 后更改 2 个不同按钮上的按钮文本时遇到问题 - 只有一个按钮可以更改自身文本。每个按钮都必须单独更改文本。

在那种情况下 - 两个按钮,两个下拉菜单,不同菜单中的不同标签,每个按钮都有自己的文本,从下拉列表中选择。

有main.py:

from kivy.app import App
from kivymd.theming import ThemeManager
from kivy.uix.screenmanager import Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.anchorlayout import AnchorLayout

def toast(text):
from kivymd.toast.kivytoast import toast

toast(text)

class MyScreen(Screen):

def __init__(self, **kwargs):
super().__init__(**kwargs)

self.menu_items = [
{
"viewclass": "MDMenuItem",
"text": "text%d" % i,
"callback": self.callback,
}
for i in range(1, 3)
]

def change_variable(self, value):
print("\nvalue=", value)
self.VARIABLE = value
print("\tself.VARIABLE=", self.VARIABLE)

def callback(self, *args):
toast(args[0])

class MainApp(App):
title = "KivyMD MDDropdownMenu Demo"
theme_cls = ThemeManager()

def build(self):
return MyScreen()


if __name__ == "__main__":
MainApp().run()

有main.kv:

#:import MDDropdownMenu kivymd.menus.MDDropdownMenu
#:import MDRaisedButton kivymd.button.MDRaisedButton

<MDMenuItem>:
on_release:
app.root.change_variable(self.text)
app.root.ids.mainbutton.text = self.text

<MyScreen>:
name: 'myscrn'
AnchorLayout:
anchor_y: 'center'
BoxLayout:
orientation: 'vertical'
size_hint: 0.1, 0.5
pos_hint: {'center_x': 0.5, 'center_y': 0.5}
spacing: dp(10)
MDRaisedButton:
id: mainbutton
size_hint: None, None
size: 3 * dp(48), dp(48)
text: 'MDButton1'
pos_hint: {'center_x': 0.5, 'center_y': 0.5}
opposite_colors: True
on_release: MDDropdownMenu(items=root.menu_items, width_mult=4).open(self)
MDRaisedButton:
id: secondbutton
size_hint: None, None
size: 3 * dp(48), dp(48)
text: 'MDButton2'
pos_hint: {'center_x': 0.5, 'center_y': 0.5}
opposite_colors: True
on_release: MDDropdownMenu(items=root.menu_items, width_mult=4).open(self)

感谢您的帮助,抱歉英语不好!

最佳答案

该解决方案需要对 Python 代码和 kv 文件进行以下增强。

主.py

  1. 添加类属性,self.menu_button = None在 MyScreen 类的构造函数中

片段-py文件

class MyScreen(Screen):

def __init__(self, **kwargs):
super().__init__(**kwargs)

...
self.menu_button = None

kv文件

  1. 初始化root.menu_buttonon_release MDRaisedButton:的事件
  2. 替换app.root.ids.mainbutton.textapp.root.menu_button.text

片段-kv文件

<MDMenuItem>:
on_release:
...
app.root.menu_button.text = self.text

<MyScreen>:
...
MDRaisedButton:
id: mainbutton
...
on_release:
root.menu_button = mainbutton
MDDropdownMenu(items=root.menu_items, width_mult=4).open(self)

MDRaisedButton:
id: secondbutton
...
on_release:
root.menu_button = secondbutton
MDDropdownMenu(items=root.menu_items, width_mult=4).open(self)

输出

Result

关于python - 从 KivyMD 中的 MDDropdownMenu 更改 2 个按钮的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57613832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com