我试图理解 python 中的 kivy 库。下面是完整的代码。
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
class MyGrid(GridLayout):
def __init__(self, **kwargs):
super(MyGrid, self).__init__(**kwargs)
self.cols = 1
self.inside = GridLayout()
self.inside.cols = 2
self.inside.name = TextInput(multiline=False)
self.inside.add_widget(self.inside.name)
self.inside.add_widget(Label(text="Name: "))
self.inside.name = TextInput(multiline=False)
self.inside.add_widget(self.inside.name)
self.inside.add_widget(Label(text="Email: "))
self.inside.name = TextInput(multiline=False)
self.inside.add_widget(self.inside.name)
self.inside.add_widget(Label(text="Phno: "))
self.add_widget(self.inside)
self.submit = Button(text="Submit", font_size=40)
self.submit.bind(on_press=self.pressed)
self.add_widget(self.submit)
def pressed(self, instance):
print("pressed")
class MyApp(App):
def build(self):
return MyGrid()
if __name__ == "__main__":
MyApp().run()
Run Code Online (Sandbox Code Playgroud)
在这里,在MyGrid课堂上,在 init 方法下,当我尝试将提交按钮(self.submit.bind)与该pressed方法绑定时,带有 on_press 的参数不包含括号。
self.submit.bind(on_press=self.pressed)
Run Code Online (Sandbox Code Playgroud)
为什么有效?是因为 Python 约定在将括号传递给方法时不包含括号吗?
而pressed方法中的instance参数又有什么用呢?
如果不带括号传递函数,则传递的是函数对象本身
self.submit.bind(on_press=self.pressed)
Run Code Online (Sandbox Code Playgroud)
这通常用于回调机制等。如果添加括号,self.pressed()将在该语句中立即调用,而不是on_press保存该函数以供稍后调用,以响应按钮单击。
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |