5 分鐘帶你入門 kivy
大家好,歡迎來到 Crossin的編程教室 !
pip3?install?kivy
from?kivy.app?import?App
class?MyApp(App):
????def?build(self):
????????"""
????????實現(xiàn)父類的build()方法
????????:return:
????????"""
????????pass
from?kivy.uix.label?import?Label
def?build(self):
????"""
????把build()方法實現(xiàn)為返回一個控件實例(這個控件的實例也就是你整個應用的根控件)
????:return:
????"""
????#?在這個方法里面使用了Label控件
????return?Label(text="Hello?World!")
#?運行?Hello?World
MyApp().run()

創(chuàng)建一個子類繼承于?App 類
重寫 build()?方法,返回一個容器控件或者自定義的控件,這個應用作為整個應用的根控件。
編寫自定義控件的 UI?布局及業(yè)務邏輯
創(chuàng)建自定義子類的實例,調(diào)用 run() 方法
#?1.使用?kivy?定義的容器控件
BoxLayout:
#?2.使用自定義的容器控件
:
TextInput:
?????id:id_input_password
?????padding:?[20,?20,?20,?20]
?????text_size:?500,?None
?????hint_text:'請輸入密碼'
?????halign:'center'
?????valign:?'middle'
#?定義點擊事件,傳入?yún)?shù)
on_press:?root.login(id_input_username.text,id_input_password.text)??????意的是,利用 adb shell am 命令打開應用的方式適用于部分不兼容自動化框架的 App。默認布局屬性中包含中文會顯示亂碼。
針對 PC 端,只需要把中文字體文件放到同級目錄下,利用 font_name 屬性指定字體即可顯示正常。
如果是 App 端,需要利用 adb 命令,進入到 /system/fonts/ 下,尋找能顯示中文的字體,然后利用 font_name 屬性指定對應的字體,就能顯示正常。
#?手機端?Miui-Bold.ttf?字體能顯示中文正常
font_name:'/system/fonts/Miui-Bold.ttf'???????
6、能不能來一個實例
下面以創(chuàng)建一個 登錄界面 來說。
登錄界面包含兩個輸入框,包含用戶名和密碼、一個登錄按鈕。
首先,我們創(chuàng)建一個類繼承自 App,重寫 build() 方法,返回一個自定義的控件。
然后編寫自定義控件的布局。
Builder.load_string('''
:?
????orientation:'vertical'
????spacing:30
????padding:20
????canvas:
????????Color:
????????????rgba:?(1,?1,?1,?1)
????????Rectangle:
????????????size:?self.size
????????????pos:?self.pos
????BoxLayout:
????????size_hint_y:?None
????????height:?'48dp'
????????orientation:'horizontal'
????????canvas:
????????????Color:
????????????????rgba:?(1,?1,?1,?.5)
????????????Rectangle:
????????????????size:?self.size
????????????????pos:?self.pos
????????Label:
????????????text_size:?300,?None
????????????text:'用戶名:'
????????????font_size:"15sp"
????????????font_name:'/system/fonts/Miui-Bold.ttf'???
????????????color:?1,0,0,1
????????TextInput:
????????????text_size:?500,?None
????????????border:?10,?10,?10,?10
????????????id:id_input_username
????????????hint_text:'請輸入用戶名'
????????????font_name:'/system/fonts/Miui-Bold.ttf'??
????????????padding:?[20,?20,?20,?20]
????????????halign:'center'
????BoxLayout:
????????size_hint_y:?None
????????height:?'48dp'
????????orientation:'horizontal'
????????canvas:
????????????Color:
????????????????rgba:?(1,?1,?1,?.5)
????????????Rectangle:
????????????????size:?self.size
????????????????pos:?self.pos
????????Label:
????????????text_size:?300,?None
????????????text:'密碼:'
????????????font_name:'/system/fonts/Miui-Bold.ttf'??
????????????color:?1,0,0,1
????????TextInput:
????????????id:id_input_password
????????????padding:?[20,?20,?20,?20]
????????????text_size:?500,?None
????????????hint_text:'請輸入密碼'
????????????font_name:'/system/fonts/Miui-Bold.ttf'??
????????????halign:'center'
????????????valign:?'middle'?
????Button:
????????id:id_btn_login
????????size_hint_y:?None
????????text_size:?100,?50
????????border:?(16,?16,?16,?16)
????????font_name:'/system/fonts/Miui-Bold.ttf'???
????????text:'登錄'
????????margin:100
????????on_press:?root.login(id_input_username.text,id_input_password.text)??????
????Label:
????????id:id_label_resut
????????color:?1,0,0,1???
''')??????
接著編寫登錄按鈕的回調(diào)方法,拿到輸入的用戶名和密碼,就能編寫業(yè)務邏輯。
def?login(self,?username,?pwd):
????if?not?username?or?not?pwd:
????????print('用戶名和密碼不能為空!')
????????popup?=?Popup(title='Warning',?content=Label(text='用戶名和密碼不能為空',font_name='/system/fonts/Miui-Bold.ttf'),
??????????????????????????size_hint=(None,?None),size=(600,?500),auto_dismiss=True)
????????popup.open()
????else:
????????resp?=?requests.get('https://www.baidu.com')
????????#?登錄成功
????????if?resp.status_code?==?200:
?????????????result?=?'Login?Success!'
????????else:
?????????????result?=?'Login?Failed!'
????????self.tv_result.text?=?result
最后,將文件 push 到手機的 /sdcard/kv 目錄下,重新運行 airport 就能展示一個登錄頁面。

7、了解更多
更多復雜的功能可以參考官方 API:
https://kivy.org/doc/stable/api-kivy.html
后臺回復「?kivy?」可獲取一份完整 kivy 中文編程指南文檔。
作者:星安果
來源:AirPython
_往期文章推薦_
評論
圖片
表情
