<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 5.4.3 graphics 與面向對象 在 Tkinter 中,只為畫布提供了類 Canvas,而畫布上繪制的各種圖形并沒有對應的類。 因此畫布是對象,而畫布上的圖形并不是對象,至少不是按面向對象風格構造的。graphics 模塊就是為了改進這一點而設計的,它將 Tkinter 的繪圖功能進行了全面的面向對象包裝。 在 graphics 模塊中,GraphWin、Point、Circle、Oval、Line、Text 和 Rectangle 等都是類,可以創建相應的對象。每個對象都是相應的類的實例,例如每個具體的“點”都 是 Point 的實例。所有點對象都具有自己的坐標值(x,y),都支持 getX()、getY()和 draw()等方法(操作)。 為創建一個類的新實例,需要構造器(constructor)。調用構造器的語法模式如下: ``` <類名>(<參數 1>,<參數 2>, ...) <變量名> = <類名>(<參數 1>,<參數 2>, ...) ``` 其中類名指定要創建什么樣的實例,例如 Point 或 Circle;諸參數是對象初始化所需的信息,例如 Point 需要兩個坐標作為參數,Circle 需要一個點(圓心)和一個數值(半徑)作為參數。構造器創建對象后,通常需要將這個對象賦予某個變量,以便今后通過這個變量引用并操作對象。 我們來看一個例子: ``` p = Point(50,60) ``` Point 構造器創建了一個點對象,變量 p 指向這個新創建的點對象。構造器的兩個參數表 示點對象的 x 和 y 坐標,這兩個值將存儲在對象內部的實例變量(instance variable)中(圖 5.24)。 ![](https://box.kancloud.cn/2016-02-22_56cafce20d6e2.png) 圖 5.24 Point 對象的創建 為了請求對象執行其內部定義的方法,需要向對象發消息。例如,對于點對象可以發送消息 p.getX()、p.getY()、p.move(dx,dy)等等。消息的一般形式如下: ``` <對象>.<方法名>(<方法參數 1>,<方法參數 2>, ...) ``` 有些對象的實例變量和方法的參數本身也可能是對象。例如,考慮如下語句: ``` >>> win = GraphWin() >>> c = Circle(Point(100,100), 30) >>> c.draw(win) ``` 上述語句的第一行創建 GraphWin 對象 win。第二行創建 Circle 對象 c,它的圓心是點 對象 Point(100,100),半徑為 30。注意,Circle 構造器的第一個參數利用 Point 構 造器創建了圓心點對象。第三行請求 Circle 對象 c 執行它的 draw()方法。圖 5.25 顯示 了 GraphWin、Circle 和 Point 對象之間的相互關系。我們通常無需關心這些細節,而 只需要創建對象并調用對象的方法,對象自會完成任務,這就是面向對象編程的力量。 ![](https://box.kancloud.cn/2016-02-22_56cafce222bb9.png) 圖 5.25 各種對象之間的關系 最后,我們用一個實例演示基于 graphics 模塊的圖形編程,讀者可以自行比較它和Tkinter 編程在風格上的異同。 【程序 5.4】sunmove.py ``` from graphics import * from time import sleep def main(): w = GraphWin("Demo",300,200) m1 = Polygon(Point(150,199),Point(200,100),Point(250,199)) m1.setFill('green') m1.draw(w) m2 = Polygon(Point(200,199),Point(250,80),Point(350,199)) m2.setFill('green') m2.draw(w) center = Point(0,100) sun = Circle(center,10) sun.setFill('red') sun.draw(w) for i in range(31): if i&lt;15: sun.move(10,-5) center.move(10,-5) elif i&lt;20: sun.move(10,0) center.move(10,0) else: sun.move(10,5) center.move(10,5) if i == 30: w.setBackground('black') sleep(0.25) w.getMouse() w.close() main() ``` 本程序先創建圖形窗口,再畫兩個多邊形和一個圓形(表示兩座山和太陽)。然后讓圓 形不斷移動:先向右上移動,再向右平移,最后向右下移動,顯然這是太陽東升西落的模擬。 天黑后點擊一下窗口即可關閉窗口結束程序。執行結果如圖 5.26 所示。 ![](https://box.kancloud.cn/2016-02-22_56cafce237713.png) 圖 5.26 程序 5.4 執行結果截圖
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看