我很难理解key和key之间的关系。Kv文件和类。我已经编写了一个简单的应用程序与两个类,Test3App &;还原,有两个按钮和一个标签。在点击还原按钮,我得到错误:AttributeError: 'Test3App'对象没有属性'Restore'。我的问题是:如何在kv或python文件中引用Restore类?
test3.py
from kivy.app import App
class Test3App(App):
def enlarge_text(self):
if self.root.ids.label.font_size <90:
self.root.ids.label.font_size += 16
else:
self.root.ids.but1.text = ' font_size atn[b][size=20]Maximum'
self.root.ids.but1.color = 'yellow'
class Restore():
def font_size_reset(self):
self.root.ids.label.font_size = 16
self.root.ids.but1.text = 'font_sizenEnlarge'
self.root.ids.but1.color = 'white'
if __name__ == '__main__':
Test3App().run()
test3.kv
BoxLayout:
Button:
id: but1
text: 'font_sizenEnlarge'
on_press: app.enlarge_text()
markup: True
Button:
text: 'font_sizenRestore'
on_press: app.Restore.font_size_reset()
Label:
id: label
font_size: 16
text: str(int(label.font_size))
通常,你会有一个Restore
的实例在你的应用程序的某个地方,你会在你的kv
引用该实例。下面是访问kv
中的font_size_reset()
方法的一种方法:
#: import Restore test3.Restore
BoxLayout:
Button:
id: but1
text: 'font_sizenEnlarge'
on_press: app.enlarge_text()
markup: True
Button:
text: 'font_sizenRestore'
on_press: Restore.font_size_reset('Abba')
Label:
id: label
font_size: 16
text: str(int(label.font_size))
import
使Restore
类在kv
中可用。对font_size_reset()
的调用提供了一个无意义的参数,因为该方法需要self
(但不使用它)。为此,必须重新定义font_size_reset()
方法以访问应用程序的root
小部件:
class Restore():
def font_size_reset(self):
root = App.get_running_app().root # get a reference to the app root widget
root.ids.label.font_size = 16
root.ids.but1.text = 'font_sizenEnlarge'
root.ids.but1.color = 'white'
一个稍微好一点的方法是将font_size_reset()
方法设置为静态,这样就不需要无意义的参数了。在这种方法中,Restore
类可以是:
class Restore():
@staticmethod
def font_size_reset():
root = App.get_running_app().root # get a reference to the app root widget
root.ids.label.font_size = 16
root.ids.but1.text = 'font_sizenEnlarge'
root.ids.but1.color = 'white'
和相应的test3.kv
:
#: import Restore test3.Restore
BoxLayout:
Button:
id: but1
text: 'font_sizenEnlarge'
on_press: app.enlarge_text()
markup: True
Button:
text: 'font_sizenRestore'
on_press: Restore.font_size_reset()
Label:
id: label
font_size: 16
text: str(int(label.font_size))