from kivy.app import App from kivy.uix.button import Button from kivy.uix.relativelayout import RelativeLayout from kivy.uix.boxlayout import BoxLayout from kivy.graphics import Color,Rectangle class MyButton(Button): """自定义一个按扭,公共属性 """ def __init__(self,**kwargs): super().__init__(**kwargs) self.font_size = 20 # 指定按扭的大小 self.size_hint = [0.3,0.3] # 按扭大小 # 布局类用于BoxLayout子布局 class RelativeLayoutWidget(RelativeLayout): pass # 父布局 class BoxLayoutWidget(BoxLayout): def __init__(self,**kwargs): super().__init__(**kwargs) # 设置颜色 with self.canvas: Color(1,1,1,1) self.rect = Rectangle(pos = self.pos,size=self.size) self.bind(pos=self.update_rect,size=self.update_rect) # 创建一个relative布局 relative_layout= RelativeLayout() # 使用自定义按扭 bt0 = MyButton(text='bt1',pos_hint={'right':1,'top':1},background_color=(0.1,0.5,0.6,1)) # 正确 bt1 = MyButton(text='bt2',pos_hint={'x':0,'top':1},background_color=(.1,.5,.6,1)) bt3 = MyButton(text='relative',pos_hint={'center_x':.5,'center_y':.5},background_color=(0.4,0.5,.6,1)) bt4 = MyButton(text='bt4',pos_hint={'x':0,'y':0},background_color=(0,0,1,1)) bt5 = MyButton(text='bt5', pos_hint={'right': 1, 'y': 0}, background_color=(0.8,0.8,0.2,1)) # 都加进新的相对布局中去 for i in [bt0,bt1,bt3,bt4,bt5]: relative_layout.add_widget(i) # 占个位 self.add_widget(BoxLayout()) # 把这个新的相对布局加到Boxlayout中 self.add_widget(relative_layout) # 此处多值参数多次忘记!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! def update_rect(self,*args): self.rect.pos=self.pos self.rect.size=self.size class RelativeApp(App): def build(self): # 返回父布局 return BoxLayoutWidget() if __name__ == '__main__': RelativeApp().run()