由于 MDLable ID 没有获取属性如何覆盖这个
Due to MDLable ID does not have get attribute how to override on this
因为我是 python 基维语的新手。这是我的代码:
from kivy import app
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.screenmanager import ScreenManager
from kivy.properties import ObjectProperty
from datetime import timedelta
from datetime import datetime
from kivy.clock import Clock
Builder.load_string('''
<TOolBar_Window>:
#timeday: timeday
name:'Main_Window1'
RelativeLayout:
MDToolbar:
title: 'Main_Window1'
elevation: 10
right_action_items: [['logout']]
pos_hint: {"left":1, "top":1}
MDLabel:
id: timeday
#text: "name"
markup:True
halign:'center'
multiline:True
''')
class TOolBar_Window(MDScreen):
pass
class MainApp(MDApp):
#timeday = ObjectProperty(None)
def build(self):
self.sm= ScreenManager()
self.sm.add_widget(TOolBar_Window(name ='tolBar_Window1'))
return self.sm
def on_start(self):
Clock.schedule_interval(self.dell,1)
def dell(self,nap):
self.nap=datetime.now()
self.nap = self.nap + timedelta(seconds = 1)
self.day = self.nap.strftime('%A')
self.date = self.nap.strftime('%d/%m/%Y')
self.time = self.nap.strftime('%I:%M:%S')
self.root.ids.timeday.text = self.day+'\n'+self.date+'\n'+self.time
if __name__ == '__main__':
MainApp().run()
在我的代码中出现如下错误:
self.root.ids.timeday.text = self.day+'\n'+self.date+'\n'+self.time
File "kivy/properties.pyx", line 864, in kivy.properties.ObservableDict.getattr
AttributeError: 'super' object has no attribute 'getattr'
如果我删除这一行:
self.root.ids.timeday.text =self.day+'\n'+self.date+'\n'+self.time
然后代码是 运行,但时间和日期未更新。我也尝试 object 属性 但仍然没有得到相同的错误。我也尝试 parents 小部件但没有使用这个错误:
'super' is substituted with the real value, because well... it doesn't have getattr,To keep my answer brief, here's the minimalistic object that extends Scatter object.,super gives you an access to a class you inherit from,I suspect(not sure) that if you use string as the value for id, you'll end up with weakref / WeakProxy pointing to a string.
问题出在您的 root
小部件上。
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.screenmanager import ScreenManager
from kivy.properties import ObjectProperty
from datetime import timedelta
from datetime import datetime
from kivy.clock import Clock
kv = ('''
<TOolBar_Window>:
name:'Main_Window1'
RelativeLayout:
MDToolbar:
title: 'Main_Window1'
elevation: 10
right_action_items: [['logout']]
pos_hint: {"left":1, "top":1}
MDLabel:
id: timeday
#text: "name"
markup:True
halign:'center'
multiline:True
''')
class TOolBar_Window(MDScreen):
pass
class MainApp(MDApp):
def build(self):
self.root = Builder.load_string(kv)
self.sm= ScreenManager()
self.sm.add_widget(TOolBar_Window(name ='tolBar_Window1'))
self.root.add_widget(self.sm)
return self.root
def on_start(self):
Clock.schedule_interval(self.dell, 1.0)
def dell(self,nap):
self.nap=datetime.now()
self.nap = self.nap + timedelta(seconds = 1)
self.day = self.nap.strftime('%A')
self.date = self.nap.strftime('%d/%m/%Y')
self.time = self.nap.strftime('%I:%M:%S')
self.root.ids.timeday.text = self.day+'\n'+self.date+'\n'+self.time
if __name__ == '__main__':
MainApp().run()
因为我是 python 基维语的新手。这是我的代码:
from kivy import app
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.screenmanager import ScreenManager
from kivy.properties import ObjectProperty
from datetime import timedelta
from datetime import datetime
from kivy.clock import Clock
Builder.load_string('''
<TOolBar_Window>:
#timeday: timeday
name:'Main_Window1'
RelativeLayout:
MDToolbar:
title: 'Main_Window1'
elevation: 10
right_action_items: [['logout']]
pos_hint: {"left":1, "top":1}
MDLabel:
id: timeday
#text: "name"
markup:True
halign:'center'
multiline:True
''')
class TOolBar_Window(MDScreen):
pass
class MainApp(MDApp):
#timeday = ObjectProperty(None)
def build(self):
self.sm= ScreenManager()
self.sm.add_widget(TOolBar_Window(name ='tolBar_Window1'))
return self.sm
def on_start(self):
Clock.schedule_interval(self.dell,1)
def dell(self,nap):
self.nap=datetime.now()
self.nap = self.nap + timedelta(seconds = 1)
self.day = self.nap.strftime('%A')
self.date = self.nap.strftime('%d/%m/%Y')
self.time = self.nap.strftime('%I:%M:%S')
self.root.ids.timeday.text = self.day+'\n'+self.date+'\n'+self.time
if __name__ == '__main__':
MainApp().run()
在我的代码中出现如下错误:
self.root.ids.timeday.text = self.day+'\n'+self.date+'\n'+self.time
File "kivy/properties.pyx", line 864, in kivy.properties.ObservableDict.getattr
AttributeError: 'super' object has no attribute 'getattr'
如果我删除这一行:
self.root.ids.timeday.text =self.day+'\n'+self.date+'\n'+self.time
然后代码是 运行,但时间和日期未更新。我也尝试 object 属性 但仍然没有得到相同的错误。我也尝试 parents 小部件但没有使用这个错误:
'super' is substituted with the real value, because well... it doesn't have getattr,To keep my answer brief, here's the minimalistic object that extends Scatter object.,super gives you an access to a class you inherit from,I suspect(not sure) that if you use string as the value for id, you'll end up with weakref / WeakProxy pointing to a string.
问题出在您的 root
小部件上。
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.screenmanager import ScreenManager
from kivy.properties import ObjectProperty
from datetime import timedelta
from datetime import datetime
from kivy.clock import Clock
kv = ('''
<TOolBar_Window>:
name:'Main_Window1'
RelativeLayout:
MDToolbar:
title: 'Main_Window1'
elevation: 10
right_action_items: [['logout']]
pos_hint: {"left":1, "top":1}
MDLabel:
id: timeday
#text: "name"
markup:True
halign:'center'
multiline:True
''')
class TOolBar_Window(MDScreen):
pass
class MainApp(MDApp):
def build(self):
self.root = Builder.load_string(kv)
self.sm= ScreenManager()
self.sm.add_widget(TOolBar_Window(name ='tolBar_Window1'))
self.root.add_widget(self.sm)
return self.root
def on_start(self):
Clock.schedule_interval(self.dell, 1.0)
def dell(self,nap):
self.nap=datetime.now()
self.nap = self.nap + timedelta(seconds = 1)
self.day = self.nap.strftime('%A')
self.date = self.nap.strftime('%d/%m/%Y')
self.time = self.nap.strftime('%I:%M:%S')
self.root.ids.timeday.text = self.day+'\n'+self.date+'\n'+self.time
if __name__ == '__main__':
MainApp().run()