# 导入Kivy的App类,它是所有kivy应用的基类
from kivy.app import App
# kivy内置了丰富的控件widget 如 按钮button 复选框checkbox 标签label 输入框textinput 滚动容器scrollable container等
from kivy.uix.button import Button
# 引入BoxLayout 布局
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
class IndexPage(BoxLayout):
# 初始化
def __init__(self, **kwargs):
super().__init__(**kwargs)
# 添加一个按钮
self.join = Button(text="Hello World")
# 将按钮添加到页面控件中
self.add_widget(self.join)
# 从App类中继承了kivy应用组基本的方法,如创建窗口、设置窗口的大小和位置等
class TestApp(App):
def build(self):
self.sm = ScreenManager()
#build()方法返回的控件,在kivy中称之为“根控件” root widget
# kivy将自动缩放根控件,让它填满整个窗口
screen = Screen(name = 'index')
screen.add_widget(IndexPage)
self.sm.add_widget(screen)
return self.sm
# 当.py文件被直接运行时, if__name__ == '__main__' 之下的代码块将被运行
# 当.py文件以模块的形式被导入时,if __name__ == '__main__' 之下的代码块不被运行
if __name__ == '__main__':
TestApp().run() #启动应用程序

TypeError: unbound method EventDispatcher.bind() needs an argument
如图报错,是因为第二十八行的代码中应该做这样修改
screen.add_widget(IndexPage())
即可正常运行。
kivy中 screen.add_widget(IndexPage()) 为什么不可以用 screen.add_widget(IndexPage)
在Kivy框架中,screen.add_widget(IndexPage()) 和 screen.add_widget(IndexPage) 之间的主要区别在于它们如何引用和实例化IndexPage类。
1. screen.add_widget(IndexPage())
当你使用IndexPage()时,你实际上是在调用IndexPage类的构造函数(也称为__init__方法),从而创建了一个IndexPage的实例。这个实例是一个Kivy小部件(Widget)对象,可以被添加到其他小部件中,比如屏幕(Screen)或布局(Layout)。因此,screen.add_widget(IndexPage())是正确的用法,因为它将一个IndexPage的实例作为子小部件添加到了screen上。
2. screen.add_widget(IndexPage)
然而,当你只写IndexPage而不加括号时,你并没有创建IndexPage的实例,而是引用了IndexPage类本身。在Kivy中,你不能直接将一个类作为小部件添加到另一个小部件中;你必须添加类的实例。因此,screen.add_widget(IndexPage)会导致一个错误,因为add_widget方法期望一个Widget的实例作为参数,而不是一个类。
总结
IndexPage()创建了一个IndexPage的实例。IndexPage引用了IndexPage类本身,而不是其实例。
在Kivy(以及大多数面向对象的编程语言)中,类是用于创建对象的蓝图或模板。对象(或实例)是类的一个具体实现,包含类的所有属性和方法,以及可能的额外数据。因此,当你想要使用某个类的功能时,你需要先创建该类的一个实例。
另一方面,在使用纯py文件时,onpress要和bind()方法相搭配才能实现页面转换功能以及current的赋值。
# 导入Kivy的App类,它是所有kivy应用的基类
from kivy.app import App
# kivy内置了丰富的控件widget 如 按钮button 复选框checkbox 标签label 输

最低0.47元/天 解锁文章
7371

被折叠的 条评论
为什么被折叠?



