首先,让我们安装Kivy并创建第一个应用:
# 安装命令:pip install kivyfrom kivy.app import Appfrom kivy.uix.label import Labelclass HelloApp(App): def build(self): return Label(text='你好呀!欢迎来到Kivy的世界!', font_name='DroidSansFallback') # 支持中文显示if __name__ == '__main__': HelloApp().run()
小贴士:要显示中文,记得设置font_name属性哦!我们可以使用系统自带的中文字体。
布局管理在Kivy中,我们可以使用不同的布局来组织界面元素。来看看最常用的几种布局:
from kivy.app import Appfrom kivy.uix.boxlayout import BoxLayoutfrom kivy.uix.button import Buttonclass LayoutDemoApp(App): def build(self): # 创建垂直布局 layout = BoxLayout(orientation='vertical', spacing=10, padding=10) # 添加三个按钮 btn1 = Button(text='按钮1') btn2 = Button(text='按钮2') btn3 = Button(text='按钮3') # 将按钮添加到布局中 layout.add_widget(btn1) layout.add_widget(btn2) layout.add_widget(btn3) return layoutif __name__ == '__main__': LayoutDemoApp().run()
小贴士:BoxLayout是最基础的布局,还有GridLayout(网格布局)、FloatLayout(浮动布局)等供我们选择!
添加交互功能让我们来创建一个简单的计数器应用,体验Kivy的交互功能:
from kivy.app import Appfrom kivy.uix.boxlayout import BoxLayoutfrom kivy.uix.button import Buttonfrom kivy.uix.label import Labelclass CounterApp(App): def build(self): self.count = 0 # 创建垂直布局 layout = BoxLayout(orientation='vertical', spacing=10, padding=20) # 显示数字的标签 self.label = Label(text='0', font_size='32sp') # 创建两个按钮 plus_btn = Button(text='+1', on_press=self.increment) minus_btn = Button(text='-1', on_press=self.decrement) # 添加所有控件 layout.add_widget(self.label) layout.add_widget(plus_btn) layout.add_widget(minus_btn) return layout def increment(self, instance): self.count += 1 self.label.text = str(self.count) def decrement(self, instance): self.count -= 1 self.label.text = str(self.count)if __name__ == '__main__': CounterApp().run()
重点提示:在Kivy中,我们通过on_press和on_release属性来处理按钮的点击事件。
使用.kv文件设计界面Kivy还提供了一种特殊的语言来设计界面,这就是.kv语言。它可以帮助我们将界面设计和程序逻辑分离:
# main.pyfrom kivy.app import Appfrom kivy.uix.widget import Widgetclass Calculator(Widget): def calculate(self): try: self.display.text = str(eval(self.display.text)) except: self.display.text = 'Error'class CalculatorApp(App): def build(self): return Calculator()if __name__ == '__main__': CalculatorApp().run()
# calculator.kv(保存为calculator.kv文件)<Calculator>: display: display BoxLayout: orientation: 'vertical' padding: 20 spacing: 10 TextInput: id: display font_size: 32 multiline: False GridLayout: cols: 4 spacing: 10 Button: text: '7' on_press: display.text += self.text Button: text: '8' on_press: display.text += self.text Button: text: '9' on_press: display.text += self.text Button: text: '/' on_press: display.text += self.text # ... 更多按钮
小贴士:.kv文件的名字必须和App类的名字对应(去掉'App'后的小写形式)。