In Kivy.如何在另一个类中引用一个方法



我很难理解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))

相关内容

  • 没有找到相关文章

最新更新