如何解决KivyMD - 下拉菜单:AttributeError: 'super' 对象在
我被这个问题困扰了好几天。而且,现在,我对这种错误有了一点了解,它与尝试使用 kivy 字符串中的 id 访问元素(下拉菜单)的 python 文件有关。
但由于我是 OOP 的新手,我无法弄清楚到底需要做什么。
代码如下:
*代码中元素的排列稍后会有所改变。所以不用担心。
我需要的只是让下拉菜单在这种代码中工作(即,屏幕管理器中有多个屏幕,每个屏幕由一个单独的类表示。)
from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import ScreenManager,Screen
from kivymd.uix.menu import MDDropdownMenu
from kivymd.uix.datatables import MDDataTable
from kivy.metrics import dp
from kivymd.uix.button import MDFloatingActionButton
class MenuScreen(Screen):
pass
class ProScreen(Screen):
def __init__(self,**kwargs):
super().__init__(**kwargs)
menu_items = [{"text": f"{i}"} for i in ["XML","Bootstrap","Mysql","None"]]
self.menu = MDDropdownMenu(
caller=self.ids.drop_item,items=menu_items,width_mult=4,callback=self.set_item)
self.menu.bind(on_release=self.set_item)
def set_item(self,instance_menu_item):
self.ids.drop_item.text = instance_menu_item.text
self.menu.dismiss()
def display_selection(self):
select1 = self.ids.drop_item.text
#lx = self.root.ids.lx.text
#res = ["the dropdown menu selection is:",]
print (select1)
def on_pre_enter(self,*args):
self.app.title = "Slab"
def show_data(self,*args):
ly = self.ids.ly.text
#lx = self.root.ids.lx.text
res = ["hi we are bts",float(ly)]
print (res)
res2 = float(ly)+1
self.ids.res11.text = str(res)
print (res2)
class UploadScreen(Screen):
pass
class DemoApp18(MDApp):
def __init__(self,**kwargs):
super().__init__(**kwargs)
self.theme_cls.primary_palette = "Blue"
#self.scr22 = Builder.load_string(temp_kv.KV)
self.screen_manager = Builder.load_string(screen_helper)
self.screen_manager = ScreenManager()
self.screen_manager.add_widget(MenuScreen(name='menupage'))
self.screen_manager.add_widget(ProScreen(name='pro'))
self.screen_manager.add_widget(UploadScreen(name='upload'))
def build(self):
return self.screen_manager
DemoApp18().run()
而 Kivy 字符串被称为“screen_helper”,在下面分享:
"""
ScreenManager:
MenuScreen:
ProScreen:
UploadScreen:
<MenuScreen>:
name: 'menupage'
MDRectangleFlatButton:
text: 'Pro'
pos_hint: {'center_x':0.5,'center_y':0.6}
on_press: root.manager.current = 'pro'
MDRectangleFlatButton:
text: 'Upload'
pos_hint: {'center_x':0.5,'center_y':0.5}
on_press: root.manager.current = 'upload'
<ProScreen>:
name: 'pro'
MDLabel:
text: 'Pro'
halign: 'center'
MDTextField:
id: ly
hint_text: "Enter longer span of slab"
helper_text: "(should be in m)"
helper_text_mode: "on_focus"
icon_right: "android"
icon_right_color: app.theme_cls.primary_color
size_hint_x:None
width:250
halign: "center"
valign: "top"
MDRectangleFlatButton:
text: 'Pro'
pos_hint: {'center_x':0.2,'center_y':0.1}
on_press:
#root.manager.current = 'menupage'
#app.screen_manager.pro.show_data()
root.show_data()
MDLabel:
#text: "Enter details:"
theme_font_styles: "H1"
id: res11
#halign: "center"
MDDropDownItem:
id: drop_item
pos_hint: {'center_x': .5,'center_y': .5}
text: 'Select OPtion'
on_release: app.menu.open()
MDRaisedButton:
id: btn1
text: "Display"
md_bg_color: app.theme_cls.primary_color
pos_hint: {"center_x": .5,"center_y": .75}
on_release:
root.display_selection()
MDRectangleFlatButton:
text: 'Back'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_press: root.manager.current = 'menupage'
<UploadScreen>:
name: 'upload'
MDLabel:
text: 'Upload'
halign: 'center'
MDRectangleFlatButton:
text: 'Back'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_press: root.manager.current = 'menupage'
"""
DropDownMenu 是我正在创建的内容的重要组成部分。我什至不能用其他元素替换它。 请建议我任何方法来完成这项工作
哦!并且错误消息如下所示:
Traceback (most recent call last):
File "kivy\properties.pyx",line 860,in kivy.properties.ObservableDict.__getattr__
KeyError: 'drop_item'
During handling of the above exception,another exception occurred:
Traceback (most recent call last):
File "C:\Users\kmd_inpython2.py",line 212,in <module>
DemoApp18().run()
File "C:\Users\kmd_inpython2.py",line 196,in __init__
self.screen_manager = Builder.load_string(screen_helper)
File "C:\Users\builder.py",line 405,in load_string
rule_children=rule_children)
File "C:\Users\builder.py",line 654,in _apply_rule
child = cls(__no_builder=True)
File "C:\Users\kmd_inpython2.py",line 115,in __init__
caller=self.ids.drop_item,File "kivy\properties.pyx",line 863,in kivy.properties.ObservableDict.__getattr__
AttributeError: 'super' object has no attribute '__getattr__'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。