自定义小部件
通过导入widget来构建小部件
main.py文件:
import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
class MyButton(Button):
pass
class MyWidget(Widget):
pass
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()
对应的my.kv文件:
<MyButton>:
color:.7,.6,.4,.1
size:120,40
<MyWidget>:
TextInput:
hint_text: 'Type something here'
size:50,50
pos:root.x+20,root.top-self.height-20
MyButton:
text: 'Press here'
pos:root.x+20,root.y+20
MyButton:
text: 'Press me'
pos:root.right-self.width-20,root.y+
对于如上所示的 button小部件,具有相似的属性,可以通过<MyButton>进行统一定义,可以省去很多麻烦,如果你觉得它不够“靓”,可以通过color进行调整。
pos可以实现对小部件位置的定义,而程序运行出的黑框是最左侧为x轴,下面为y轴,左下角为原点,而root和self可以实现对部件位置很好的把控,如图:
FloatLayout浮动布局
由pos_hint、size_hint进行布局:
size_hint: .5, .5此处.5表示百分之五十,即水平方向和垂直方向均占半分之五十
当x值等于1时,将填满水平方向
而size_hint: 1,1 可以填满整个窗口
对于pos_hint:
x属性------->代表左边框的位置
同理,描述右边框位置的 right属性和描述部件中心水平位置的center_x作用一致:
而垂直定位和水平的一样:
双向定位
话不多说,先上代码:
#file name:main.py
import kivy
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
class MyButton(Button):
pass
class MyFloat(FloatLayout):
pass
class MyApp(App):
def build(self):
return MyFloat()
if __name__ == '__main__':
MyApp().run()
kv文件:
#file name:my.kv
<MyButton>:
size_hint:.1,.1
<MyFloat>:
MyButton:
text: 'Press here one'
pos_hint:{'x':.5,'y':.6}
MyButton:
text: 'Press me two'
pos_hint:{'x':.5, 'y': .2}
通过对水平方向和垂直方向的组合,运行结果: