- 框架代碼
用 PyCharm 新建一個(gè)名為 SimplePaintApp 的項(xiàng)目十绑,然后新建一個(gè)名為 simple_paint_app.py 的 Python 源文件,
在代碼編輯器中拄丰,輸入以下框架代碼
from kivy.app import App
from kivy.uix.widget import Widget
class MyPaintWidget(Widget):
pass
class MyPaintApp(App):
def build(self):
return MyPaintWidget()
if __name__ == '__main__':
MyPaintApp().run()
運(yùn)行上面的代碼晌端,將顯示一個(gè)黑色背景的窗口
看起來很沒勁的樣子谚殊,不過你可不要小瞧這幾行代碼。這些就是簡易畫板的框架代碼仇参,它就像是程序的骨架嘹叫,后面咪博士將會(huì)帶領(lǐng)大家在這副骨架上添加各種新功能,逐步豐富和完善應(yīng)用诈乒。
第 5 行 class MyPaintWidget(Widget): 從類 Widget 繼承罩扇,構(gòu)造我們的自定義窗口部件 MyPaintWidget。畫板的主要邏輯將在 MyPaintWidget 這個(gè)類中實(shí)現(xiàn)∨履ィ現(xiàn)在我們只寫了一個(gè) pass (第 6 行)喂饥,相當(dāng)于是占位符,先讓整段代碼跑起來肠鲫,具體的功能员帮,我們將在后面的教程中補(bǔ)充。
第 12 行 return MyPaintWidget() 在應(yīng)用初始化時(shí)(調(diào)用 build 方法)創(chuàng)建并返回自定義窗口部件對(duì)象 MyPaintWidget
- 添加交互
現(xiàn)在咱們的自定義窗口部件啥也干不了导饲,接下來我們要嘗試讓它能夠響應(yīng)用戶的動(dòng)作捞高。
代碼如下:運(yùn)行上面的代碼,將顯示一個(gè)黑色背景的窗口
看起來很沒勁的樣子渣锦,不過你可不要小瞧這幾行代碼硝岗。這些就是簡易畫板的框架代碼,它就像是程序的骨架袋毙,后面咪博士將會(huì)帶領(lǐng)大家在這副骨架上添加各種新功能型檀,逐步豐富和完善應(yīng)用。
第 5 行
class MyPaintWidget(Widget):
從類 Widget 繼承听盖,構(gòu)造我們的自定義窗口部件 MyPaintWidget胀溺。畫板的主要邏輯將在 MyPaintWidget 這個(gè)類中實(shí)現(xiàn)。現(xiàn)在我們只寫了一個(gè)
pass
(第 6 行)媳溺,相當(dāng)于是占位符,先讓整段代碼跑起來碍讯,具體的功能悬蔽,我們將在后面的教程中補(bǔ)充。
第 12 行
return MyPaintWidget()
在應(yīng)用初始化時(shí)(調(diào)用 build 方法)創(chuàng)建并返回自定義窗口部件對(duì)象 MyPaintWidget
2. 添加交互
現(xiàn)在咱們的自定義窗口部件啥也干不了捉兴,接下來我們要嘗試讓它能夠響應(yīng)用戶的動(dòng)作蝎困。
代碼如下:
from kivy.app import App
from kivy.uix.widget import Widget
class MyPaintWidget(Widget):
def on_touch_down(self, touch):
print(touch)
class MyPaintApp(App):
def build(self):
return MyPaintWidget()
if __name__ == '__main__':
MyPaintApp().run()
運(yùn)行修改后的代碼录语,仍然顯示一個(gè)黑色的窗口,似乎沒什么變化禾乘。但是澎埠,當(dāng)你用鼠標(biāo)在窗口中點(diǎn)擊的時(shí)候,發(fā)現(xiàn)在 PyCharm 的控制臺(tái)有輸出始藕,而且隨著點(diǎn)擊位置的不同蒲稳,輸出的數(shù)字也會(huì)變化。
當(dāng)用戶在窗口上用鼠標(biāo)點(diǎn)擊的時(shí)候伍派,將觸發(fā) MyPaintWidget 的 on_touch_down 方法(第 6 行)江耀。on_touch_down 方法的 touch 參數(shù),包含了鼠標(biāo)點(diǎn)擊時(shí)的位置信息诉植。這里祥国,我們還沒實(shí)現(xiàn)什么有用的交互,只是把鼠標(biāo)點(diǎn)擊的位置信息輸出到控制臺(tái)晾腔,即第 7 行代碼 print(touch)
【思考】
用本節(jié)的應(yīng)用做實(shí)驗(yàn)舌稀,思考 kivy 采用的坐標(biāo)系統(tǒng)是什么樣的?(原點(diǎn)在哪里灼擂?x 和 y 的方向如何壁查?)
運(yùn)行修改后的代碼,仍然顯示一個(gè)黑色的窗口缤至,似乎沒什么變化潮罪。但是,當(dāng)你用鼠標(biāo)在窗口中點(diǎn)擊的時(shí)候领斥,發(fā)現(xiàn)在 PyCharm 的控制臺(tái)有輸出嫉到,而且隨著點(diǎn)擊位置的不同,輸出的數(shù)字也會(huì)變化月洛。
當(dāng)用戶在窗口上用鼠標(biāo)點(diǎn)擊的時(shí)候何恶,將觸發(fā) MyPaintWidget 的 on_touch_down 方法(第 6 行)。on_touch_down 方法的 touch 參數(shù)嚼黔,包含了鼠標(biāo)點(diǎn)擊時(shí)的位置信息细层。這里,我們還沒實(shí)現(xiàn)什么有用的交互唬涧,只是把鼠標(biāo)點(diǎn)擊的位置信息輸出到控制臺(tái)疫赎,即第 7 行代碼
print(touch)
【思考】
- 用本節(jié)的應(yīng)用做實(shí)驗(yàn),思考 kivy 采用的坐標(biāo)系統(tǒng)是什么樣的碎节?(原點(diǎn)在哪里捧搞?x 和 y 的方向如何?)
原文鏈接:http://www.ipaomi.com/2017/11/15/kivy-中文教程-實(shí)例入門-簡易畫板-simple-paint-app:1-自定義窗口部/