1,self与root有什么区别?
self是用来代指对象实例本身的,root是用来代指根对象的。交互部件的参数用self,交互窗口的参数用root。
self代指对象实例本身,通常有如下几种情况。
self
- a,在py文件中继承部件类的self,代指当前对象的实例,示例如下。此self是部件中的根部件,可以访问部件内的所有部件,实现获取或设置Label标签的属性,等类似的操作。
class PongGame(Widget):
def update(self, dt):
# 调用球的移动等操作
pass
- b,在kv文件中部件事件属性的self,代指当前对象的实例,示例如下。此self代指Button部件本身,用于将本部件的参数传给函数,这样就可以在函数里面来实现与本部件的交互。至于为什么要在press_button(self)函数前面加root是因为程序并不知道这个函数是全局函数还是局部函数,所以添加root是为了告诉程序我所调用的这个函数是在继承布局类下。
<ButtonFloatLayout>:
Button:
text:'Button'
size_hint:.2,.15
pos_hint:{'center_x':.5,'center_y':.5}
background_normal:''
background_color:[.1,.5,.5,1]
#按下按钮时触发事件
on_press:root.press_button(self)
#按下按钮并释放时,触发该事件
on_release:root.release_button(self)
root
root是用来代指根对象的,可以理解为窗口,通常有如下几种用途:
- a,在继承部件类中,可以用 self.add_widget(部件变量),将部件添加到布局
class BoxLayoutWidget(BoxLayout):
def __init__(self,**kwargs):
super().__init__(**kwargs)
#指定属性
bt = Button(text='Button 01')
#添加到布局中
self.add_widget(bt)
- b,在kv文件中,可以用来设置属性相对于根对象的宽高等
Label:
font_size: 70
center_x: root.width / 4
top: root.top - 50
text: "0"
总体来说:
self
是指当前对象实例,用于访问和操作对象的属性和方法。
root
是指界面的根对象,用于访问或操作根对象下的其他子组件。
注意:canvas画布不属于部件,在canvas里面写self代指的是所写canvas的部件
2,格式化字符串的几种方法,f?%?
当变量遇到字符串,会参数什么火花嘞?
普通的如下,但是遇到相对复杂的相加过于繁琐。所以我们采用其他易读性相对舒服的格式化代码的方式。这里的格式化代码可以理解为“在字符串中插入表达式或变量的值以便生成一个新的字符串”,和文本编辑器中的格式化代码的缩进还是有点区别的。
name='夕星'
print("你好呀,我的名字叫做"+name)
f-strings
f-strings这是Python 3.6及更高版本引入的一种字符串格式化方法。你可以在字符串前加上字母"f",然后在字符串中使用大括号 {}
来插入变量或表达式的值。
name = "夕星"
age = 30
print(f"{name} 今年 {age} 岁了.")
str.format()
str.format() 这是一种较早的字符串格式化方法,在Python 2.6及更高版本中都可以使用。你可以在字符串中使用大括号 {}
,然后调用 format()
方法并传入相应的参数。
name = "夕星"
age = 30
print("{} 今年 {} 岁.".format(name, age))
% 操作符
% 操作符这是一种较早的字符串格式化方法,在Python的所有版本中都可用。你可以使用 %
操作符,然后在字符串中使用格式化说明符 %s
(字符串)、%d
(整数)、%f
(浮点数)等,然后将要插入的值作为操作符右侧的元组。
name = "夕星"
age = 30
print("%s 今年 %d 岁了." % (name, age))