我的kv代码有问题。我想用几个NavigationDrawerIconButtons
创建一个MDNavigationDrawer
。窗口会出现,但当我单击MDToolbar时,程序崩溃并显示此错误消息。在
Traceback (most recent call last):
File "C:/Users/path/to/my/file/main.py", line 189, in <module>
KivyGUI().run()
File "C:\Users\uname\Anaconda3\lib\site-packages\kivy\app.py", line 855, in run
runTouchApp()
File "C:\Users\uname\Anaconda3\lib\site-packages\kivy\base.py", line 504, in runTouchApp
EventLoop.window.mainloop()
File "C:\Users\uname\Anaconda3\lib\site-packages\kivy\core\window\window_sdl2.py", line 746, in mainloop
self._mainloop()
File "C:\Users\uname\Anaconda3\lib\site-packages\kivy\core\window\window_sdl2.py", line 478, in _mainloop
EventLoop.idle()
File "C:\Users\uname\Anaconda3\lib\site-packages\kivy\base.py", line 342, in idle
self.dispatch_input()
File "C:\Users\uname\Anaconda3\lib\site-packages\kivy\base.py", line 327, in dispatch_input
post_dispatch_input(*pop(0))
File "C:\Users\uname\Anaconda3\lib\site-packages\kivy\base.py", line 293, in post_dispatch_input
wid.dispatch('on_touch_up', me)
File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
File "C:\Users\uname\Anaconda3\lib\site-packages\kivymd\ripplebehavior.py", line 84, in on_touch_up
return super().on_touch_up(touch)
File "C:\Users\uname\Anaconda3\lib\site-packages\kivymd\button.py", line 480, in on_touch_up
return super().on_touch_up(touch)
File "C:\Users\uname\Anaconda3\lib\site-packages\kivy\uix\behaviors\button.py", line 179, in on_touch_up
self.dispatch('on_release')
File "kivy\_event.pyx", line 703, in kivy._event.EventDispatcher.dispatch
File "kivy\_event.pyx", line 1214, in kivy._event.EventObservers.dispatch
File "kivy\_event.pyx", line 1138, in kivy._event.EventObservers._dispatch
File "C:\Users\path\to\my\file\design.kv", line 59, in <lambda>
left_action_items: [['dots-vertical', lambda x: root.toggle_nav_drawer()]]
File "kivy\weakproxy.pyx", line 32, in kivy.weakproxy.WeakProxy.__getattr__
AttributeError: 'LayoutPy' object has no attribute 'toggle_nav_drawer'
我从一个单独的文件导入kv代码。在
^{pr2}$Python代码:
import sys
import kivy
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
from kivymd.theming import ThemeManager
from kivymd.label import MDLabel
from kivymd.textfields import MDTextField, MDTextFieldClear, MDTextFieldRect, MDTextFieldRound
from kivy.lang import Builder
from kivymd.navigationdrawer import MDNavigationDrawer, NavigationDrawerIconButton, NavigationLayout
from kivy.properties import ObjectProperty
from kivymd.toast import toast
kivy.require('1.11.0')
class LayoutPy(FloatLayout):
def __init__(self, **kwargs):
super(LayoutPy, self).__init__(**kwargs)
self.scr_mngr = ObjectProperty(None)
self.build_nav_btns()
def callback(self, instance, value):
toast("Pressed item menu %d" % value)
def exit(self):
sys.exit(1)
def build_nav_btns(self):
btns = ["Select Language", "Contact the developer", "Exit"]
for count, btn in enumerate(btns):
if count == 1:
self.ids.nav_drawer.add_widget(
NavigationDrawerIconButton(
icon='settings', text=btn,
on_release=lambda x, btn: self.callback(x, btn)))
elif count == 2:
self.ids.nav_drawer.add_widget(
NavigationDrawerIconButton(
icon='face', text=btn,
on_release=lambda x, btn: self.callback(x, btn)))
elif count == 3:
self.ids.nav_drawer.add_widget(
NavigationDrawerIconButton(
icon='close', text=btn,
on_release=lambda x: self.exit()))
Builder.load_file("design.kv")
class KivyGUI(App):
theme_cls = ThemeManager()
theme_cls.primary_palette = ("Teal")
title = ("App")
def build(self):
c = LayoutPy()
return c
if __name__ == "__main__":
KivyGUI().run()
我对Python代码进行了大量的裁剪,这样对您来说就更清楚了。我不认为这是模块本身的问题,因为KivyMD example code对我来说很好(这也是我运行它时解决方案的外观)。我认为问题是我的LayoutPy
类继承了FloatLayout
,它没有{NavigationDrawer
之前,一切都很好),您可以看看here。在
先谢谢你!在
错误-AttributeError
根本原因
对象
LayoutPy
没有属性toggle_nav_drawer
,因为toggle_nav_drawer
是在LayoutPy
的实例化子级NavigationLayout:
中定义的。在解决方案
{{cd7}替换为
代码段-kv文件
^{pr2}$输出
相关问题 更多 >
编程相关推荐