1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        5 分鐘帶你入門 kivy

        共 4631字,需瀏覽 10分鐘

         ·

        2021-02-01 23:20





        大家好,歡迎來到 Crossin的編程教室 !


        今天給大家分享一個Python的UI框架:kivy

        kivy 通過編寫界面 UI,然后利用 Python 定義一些業(yè)務邏輯,可以移植很多功能模塊到移動端直接執(zhí)行。

        下面對 kivy 常見用法做一個匯總。


        1、什么是 kivy?

        kivy 是一個開源跨平臺的 Python UI 框架,就可以快速開發(fā) PC、移動端的 GUI 。

        kivy 基于 Python,采用 Python 和 CPython,界面代碼和業(yè)務邏輯代碼相互分離。


        2、Hello World 怎么寫?


        在 pycharm 中編寫 kivy 代碼塊前,需要在虛擬環(huán)境內(nèi)安裝 kivy 依賴庫。

        pip3?install?kivy

        然后,定義一個 kivy.app.py App 類的子類,重寫 build 方法。

        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()

        最后,直接調(diào)用自定義類的 run() 方法,運行在 PC 端展示效果如下。


        當然,也可以重命名文件名為:kvmain.py,然后利用 adb 命令拷貝到?/sdcard/kv/ 下,重新冷啟動 airport 應用就可以在移動端上運行了。


        3、創(chuàng)建應用的步驟

        使用 kivy 創(chuàng)建 App 包含 3 個步驟,分別是:
        • 創(chuàng)建一個子類繼承于?App 類

        • 重寫 build()?方法,返回一個容器控件或者自定義的控件,這個應用作為整個應用的根控件。

        • 編寫自定義控件的 UI?布局及業(yè)務邏輯

        • 創(chuàng)建自定義子類的實例,調(diào)用 run() 方法


        4、怎么編寫 UI 布局


        編寫 UI 布局常用?Builder.load_string() 方法,傳入一段配置代碼,生成控件樹。

        首先需要聲明一個根控件類,可以使用 kivy 中定義的布局容器控件,也可以使用自定義的控件(?常用?)。

        #?1.使用?kivy?定義的容器控件
        BoxLayout:

        #?2.使用自定義的容器控件
        :

        然后利用層級關(guān)系編寫父控件、子控件,包含:id、text、高度和高度、對齊關(guān)系、顏色等屬性。

        TextInput:
        ?????id:id_input_password
        ?????padding:?[20,?20,?20,?20]
        ?????text_size:?500,?None
        ?????hint_text:'請輸入密碼'
        ?????halign:'center'
        ?????valign:?'middle'

        最后,對于自定義控件中綁定的各種事件需要定義回調(diào)方法進行處理掉。

        #?定義點擊事件,傳入?yún)?shù)
        on_press:?root.login(id_input_username.text,id_input_password.text)??????意的是,利用 adb shell am 命令打開應用的方式適用于部分不兼容自動化框架的 App。



        5、中文亂碼問題


        默認布局屬性中包含中文會顯示亂碼。


        針對 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



        _往期文章推薦_

        一個極簡易上手的Python GUI庫




        瀏覽 52
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日韩激情无码 | A片成人黄片 | 大奶操逼 | 国产精品高清尿小便嘘嘘剧情介绍 | 成人片黄网站色大片免费韩国 | 国产精品免费人成网站酒店 | 欧美老寡妇精品三区 | ass粉嫩中国小美女pics | 男女裸交无遮挡毛片免费 | 操逼性爰网站 |