Flet-基于Flutter的Python跨平臺(tái)框架
昨天剛發(fā)了一篇Python桌面開發(fā)庫(kù)大全的微頭條,就被同事安利了Flet這個(gè)庫(kù)。這是一個(gè)非常新的庫(kù),今年6月份才發(fā)布的第一個(gè)版本,雖然很新,但是它背靠巨人-Flutter,可以讓我們使用Python開發(fā)全平臺(tái)軟件,雖然目前還不支持全平臺(tái),但是根據(jù)作者的計(jì)劃,F(xiàn)lutter支持的,它以后都會(huì)支持的,昨天簡(jiǎn)單學(xué)習(xí)了一下,真的非常棒,把它推薦給大家。后面我們可以用它做一系列東西。
什么是Flet
Flet是一個(gè)框架,允許用你喜歡的語(yǔ)言構(gòu)建交互式多用戶Web,桌面和移動(dòng)應(yīng)用程序,而無(wú)需擁有前端開發(fā)的經(jīng)驗(yàn)。
主要特點(diǎn)
在幾分鐘內(nèi)從想法到應(yīng)用程序
為您的團(tuán)隊(duì),周末項(xiàng)目,數(shù)據(jù)輸入表單,kiosk應(yīng)用程序或高保真原型提供的內(nèi)部工具或儀表板 - Flet是一個(gè)理想的框架,可以快速破解一個(gè)美觀的交互式應(yīng)用程序,為一組用戶提供服務(wù)。
簡(jiǎn)單的架構(gòu)
沒有更復(fù)雜的架構(gòu)與JavaScript前端,REST API后端,數(shù)據(jù)庫(kù),緩存等。使用Flet,您只需在Python中編寫一個(gè)整體式有狀態(tài)應(yīng)用程序,即可獲得多用戶實(shí)時(shí)單頁(yè)應(yīng)用程序(SPA)。
包括電池
要開始使用 Flet 進(jìn)行開發(fā),您只需要自己喜歡的 IDE 或文本編輯器。沒有 SDK,沒有成千上萬(wàn)的依賴項(xiàng),沒有復(fù)雜的工具 - Flet 具有內(nèi)置的 Web 服務(wù)器,其中包含托管資產(chǎn)和桌面客戶端。
由Flutter提供動(dòng)力
Flet UI是用Flutter構(gòu)建的,所以你的應(yīng)用程序看起來(lái)很專業(yè),可以交付到任何平臺(tái)。Flet通過將較小的“小部件”組合成具有命令式編程模型的即用型“控件”來(lái)簡(jiǎn)化Flutter模型。
語(yǔ)言無(wú)關(guān)
Flet 與語(yǔ)言無(wú)關(guān),因此團(tuán)隊(duì)中的任何人都可以用自己喜歡的語(yǔ)言開發(fā) Flet 應(yīng)用程序。Python已經(jīng)得到支持,Go,C#和其他產(chǎn)品緊隨其后。
交付到任何設(shè)備
將 Flet 應(yīng)用部署為 Web 應(yīng)用,并在瀏覽器中查看它。將其打包為適用于Windows,macOS和Linux的獨(dú)立桌面應(yīng)用程序。將其作為PWA安裝在移動(dòng)設(shè)備上,或通過適用于iOS和Android的Flet應(yīng)用程序查看。
安裝使用
pip install flet
一個(gè)簡(jiǎn)單的計(jì)數(shù)示例
import flet
from flet import IconButton, Page, Row, TextField, icons
def main(page: Page):
page.title = "Flet counter example"
page.vertical_alignment = "center"
txt_number = TextField(value="0", text_align="right", width=100)
def minus_click(e):
txt_number.value = int(txt_number.value) - 1
page.update()
def plus_click(e):
txt_number.value = int(txt_number.value) + 1
page.update()
page.add(
Row(
[
IconButton(icons.REMOVE, on_click=minus_click),
txt_number,
IconButton(icons.ADD, on_click=plus_click),
],
alignment="center",
)
)
flet.app(target=main)
運(yùn)行程序:
python counter.py
如何我們希望它只運(yùn)行在瀏覽器端,可以如下配置:
flet.app(target=main, view=flet.WEB_BROWSER)
默認(rèn)是運(yùn)行桌面端的,但是在我們啟動(dòng)的時(shí)候,會(huì)在隨機(jī)端口啟動(dòng)一個(gè)web服務(wù)器,也可以在web端進(jìn)行訪問
這是官方給的簡(jiǎn)單示例,我們來(lái)寫一個(gè)稍微復(fù)雜一點(diǎn)的:計(jì)算器。
頁(yè)面代碼比較多,但是挺簡(jiǎn)單的,就不貼了,可以看到即使用原生的控件拼出來(lái)頁(yè)面效果也還不錯(cuò),比其他的Python桌面開發(fā)庫(kù)要好看的多。雖然它沒有QT那種界面設(shè)計(jì)器,通過拖拖拽拽就能生成頁(yè)面,但是它的布局方式與前端一樣,因此對(duì)于會(huì)前端的開發(fā)人員來(lái)說(shuō)非常熟悉,使用起來(lái)也很方便。
總結(jié)
目前這個(gè)項(xiàng)目還只是一個(gè)BETA版的,官方文檔也不夠完善,但是用來(lái)開發(fā)一些基礎(chǔ)的軟件還是沒問題的。尤其是基于Flutter,不需要像Electron一樣打包c(diǎn)hromium內(nèi)核進(jìn)去。等后期接入多種語(yǔ)言后,將會(huì)給很多程序員提供一個(gè)優(yōu)秀的跨平臺(tái)開發(fā)方式,不用像Electron和Flutter一樣需要特定的開發(fā)語(yǔ)言才能上手,期待它更加完善。后面我們可以多嘗試一些小工具來(lái)練練手。