四、編程向?qū)?4.8圖形)

編程向?qū)В?.8圖形

一雁乡、畫布介紹

部件繪畫的表現(xiàn)使用畫布來完成第喳。你可以將它看作一個無限制的畫板,或者一個繪畫指令的集合蔗怠。
在你的畫布中墩弯,你可以應(yīng)用的指令有很多,但是最主要的兩個是:

  • 上下文指令(context instructions)
  • 頂點指令(vertex instructions)

上下文指令不畫任何東西寞射,但是它們改變頂點指令的結(jié)果渔工。

畫布包含指令的兩種子集合:canvas.before, canvas.after。這些指令在canvas前或后執(zhí)行桥温。這些指令直到用戶訪問時才創(chuàng)建引矩。

為了添加一個畫布指令到部件,你需要使用畫布上下文:

class MyWidget(Widget):
    def __init__(self, **kwargs):
        super(MyWidget, self).__init__(**kwargs)
        with self.canvas:
            #為主畫布添加你的指令

        with self.canvas.before:
            #渲染前執(zhí)行

        with self.canvas.after:
            #渲染后執(zhí)行

二侵浸、上下文指令

上下文指令操縱Opengl上下文旺韭。你可以旋轉(zhuǎn)、轉(zhuǎn)換掏觉、拉伸你的畫布区端。你也可以附著一個材質(zhì)或改變繪畫的顏色。這是最常用的澳腹,但是其它也是很有用的织盼,比如:

with self.canvas.before:
    Color(1, 0, .4, mode='rgb')

三杨何、繪畫指令

繪畫指令簡單的包括畫一條直線或一個多邊形,復(fù)雜的包括貝塞爾曲線:

with self.canvas:
    #畫一條直線沥邻,使用默認的顏色
    Line(points=(x1, y1, x2, y2, x3, y3))

    #畫一個半透明的紅色的正方形
    Color(1, 0, 0, .5, mode='rgba')
    Rectangle(pos=self.pos, size=self.size)

四危虱、配置指令

有時,你想更新或移除你的指令唐全,根據(jù)你的需要可以使用不同的方式:
你可以保持一個你的指令的引用并更新它們:

class MyWidget(Widget):
    def __init__(self, **kwargs):
        super(MyWidget, self).__init__(**kwargs)
        with self.canvas:
            self.rect = Rectangle(pos=self.pos, size=self.size)

        self.bind(pos=self.update_rect)
        self.bind(size=self.update_rect)

    def update_rect(self, *args):
        self.rect.pos = self.pos
        self.rect.size = self.size

或者你可以清理你的畫布并啟動刷新:

class MyWidget(Widget):
    def __init__(self, **kwargs):
        super(MyWidget, self).__init__(**kwargs)
        self.draw_my_stuff()

        self.bind(pos=self.draw_my_stuff)
        self.bind(size=self.draw_my_stuff)

    def draw_my_stuff(self):
        self.canvas.clear()

        with self.canvas:
            self.rect = Rectangle(pos=self.pos, size=self.size)

注意更新的指令被認為是最佳實踐,因為它需要更少的開銷和避免創(chuàng)建新的指令埃跷。

下節(jié)預(yù)告:編程向?qū)?.9Kv語言

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市邮利,隨后出現(xiàn)的幾起案子弥雹,更是在濱河造成了極大的恐慌,老刑警劉巖近弟,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缅糟,死亡現(xiàn)場離奇詭異,居然都是意外死亡祷愉,警方通過查閱死者的電腦和手機窗宦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來二鳄,“玉大人赴涵,你說我怎么就攤上這事《┧希” “怎么了髓窜?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長欺殿。 經(jīng)常有香客問我寄纵,道長,這世上最難降的妖魔是什么脖苏? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任程拭,我火速辦了婚禮,結(jié)果婚禮上棍潘,老公的妹妹穿的比我還像新娘恃鞋。我一直安慰自己,他們只是感情好亦歉,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布恤浪。 她就那樣靜靜地躺著,像睡著了一般肴楷。 火紅的嫁衣襯著肌膚如雪水由。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天赛蔫,我揣著相機與錄音砂客,去河邊找鬼直秆。 笑死,一個胖子當著我的面吹牛鞭盟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瑰剃,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼齿诉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晌姚?” 一聲冷哼從身側(cè)響起粤剧,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挥唠,沒想到半個月后抵恋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡宝磨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年弧关,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唤锉。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡世囊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窿祥,到底是詐尸還是另有隱情株憾,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布晒衩,位于F島的核電站嗤瞎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏听系。R本人自食惡果不足惜贝奇,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望跛锌。 院中可真熱鬧弃秆,春花似錦、人聲如沸髓帽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽郑藏。三九已至衡查,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間必盖,已是汗流浹背拌牲。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工俱饿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人塌忽。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓拍埠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親土居。 傳聞我的和親對象是個殘疾皇子枣购,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容