【问题标题】:Kivy: Error while trying to capture options from MDDropDownMenuKivy:尝试从 MDDropDownMenu 捕获选项时出错
【发布时间】:2020-10-06 20:42:18
【问题描述】:

我是 kivy 的新手,我正在尝试添加一个下拉列表并尝试捕获在变量中单击的选项,但这样做时我似乎遇到了很多错误。 这是我得到的错误:

这是我的 main.py 文件:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty, ReferenceListProperty
from kivy.vector import Vector
from kivy.uix.label import Label
from kivy.uix.button import Button  
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.uix.menu import MDDropdownMenu
from kivymd.uix.behaviors import RectangularElevationBehavior
from kivymd.uix.boxlayout import MDBoxLayout
from kivy.config import Config
from kivymd.app import MDApp
from kivy.lang import Builder

Config.set('graphics', 'resizable', False)
class CustomToolbar(ThemableBehavior, RectangularElevationBehavior, MDBoxLayout,):
   def __init__(self, **kwargs):
       super().__init__(**kwargs)
       self.md_bg_color = self.theme_cls.primary_color

class MainApp(MDApp):
   def __init__(self, **kwargs):
       self.VARIABLE = ""
       super().__init__(**kwargs)
       self.screen = Builder.load_file("main.kv")

       menu_items = [{"viewclass": "MDMenuItem","text": "Label1"},{"viewclass":
       "MDMenuItem","text": "Label2"}]
       self.menu = MDDropdownMenu(
       caller=self.screen.ids.drop_item,
       items=self.menu_items,
       position="center",
       width_mult=3,
        )
       self.menu.bind(on_release=self.menu_callback)

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

   def menu_callback(self, instance_menu, instance_menu_item):
       instance_menu.dismiss()

   def build(self):
       return self.screen
    
 MainApp().run()

这是我的 .kv 文件:

<ScreenManagement>:
id: scr_mngr
MainAppScreen:
    name: 'main'
    id: main
<CustomToolbar>:
#some widgets here
 BoxLayout:
    #some widgets here
<MDMenuItem>:
on_release: app.root.change_variable(self.text)
Screen:
    MDRaisedButton:
        id: drop_item
        text: "W"
        pos_hint: {"center_x": .9, "center_y": .68}
        on_release: app.menu.open()

我被困了2天,请帮忙。在此先感谢:D

【问题讨论】:

    标签: python-3.x kivy kivymd


    【解决方案1】:

    如果您在build() 方法中构建GUI 并使用Clock.schedule_once() 设置菜单,我认为您的代码将起作用,如下所示:

    class MainApp(MDApp):
       def change_variable(self, value):
           print("\nvalue=", value)
           self.VARIABLE = value
           print("\tself.VARIABLE=", self.VARIABLE)
    
       def menu_callback(self, instance_menu, instance_menu_item):
           instance_menu.dismiss()
    
       def build(self):
           self.VARIABLE = ""
           self.screen = Builder.load_file("main.kv")
    
           Clock.schedule_once(self.setup_menu)
           return self.screen
    
       def setup_menu(self, dt):
           menu_items = [{"viewclass": "MDMenuItem","text": "Label1"},{"viewclass":
           "MDMenuItem","text": "Label2"}]
           self.menu = MDDropdownMenu(
               caller=self.screen.ids.drop_item,
               items=menu_items,
               position="center",
               width_mult=3
            )
           self.menu.bind(on_release=self.menu_callback)
    

    【讨论】:

    • 它给出了同样的错误:(。我应该发布我的整个代码吗?
    • 感谢您的努力!但它仍然是错误的。
    猜你喜欢
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    相关资源
    最近更新 更多