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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 5.2.2 創建畫布 為了繪圖,首先要有畫布。Tkinter 中提供了畫布(Canvas),可以在畫布上繪制圖形、 文本,也可以在上面放置命令按鈕等 GUI 構件。畫布實際上是一個 Canvas 對象,它包含 一些屬性(如畫布的高度、寬度、背景色等),也包含一些方法(如在畫布上創建圖形、刪 除或移動圖形等)。 創建畫布對象的語句模板如下: ``` c = Canvas(<窗口>,<選項 1>=<值 1>,<選項 2>=<值 2>,...) ``` 其中 Canvas 是 Tkinter 提供的類(class),所謂“類”其實就和 int、float 等一樣是數據類型,只不過不是 Python 語言的內建類型,而是 Tkinter 模塊帶來的擴展類型。Canvas就像一個制造畫布的工廠,每次執行 Canvas()都能制造出一個畫布對象。參數&lt;窗口&gt;表示畫布所在的窗口,諸&lt;選項&gt;=&lt;值&gt;為畫布對象的選項(即屬性)進行賦值。總之,整條語句創建一個 Canvas 對象,對該對象的數據進行設置,并將該對象賦值給變量 c(更準確的 說法是變量 c 引用該對象)。 畫布的常用選項包括 height(畫布高度)、width(畫布寬度)和 bg(或 background, 畫布背景色)等,需要在創建畫布對象時進行設置。創建畫布對象時如果不設置這些選項的 值,則各選項取各自的缺省值,例如 bg 的缺省值為淺灰色。畫布對象的所有選項都可以在 創建以后的任何時候重新設置。 下面的語句在根窗口 root 中創建一個寬度為 300 像素①、高度為 200 像素、背景為白 色的畫布: ``` >>> c = Canvas(root,width=300,height=200,bg='white') ``` 注意,雖然至此已經創建了畫布對象,但在根窗口中并沒有看到這塊白色畫布,這就好 比從商店買來了畫布,但還沒有鋪到桌子上一樣。為了讓畫布在窗口中顯現出來,還需要執 行如下“布置畫布”的語句②: ``` >>> c.pack() ``` 現在,我們在屏幕上看到原來的根窗口(背景色為淺灰色)中放進了一個 300x200 的白色畫 布。如圖 5.3 所示。 ![](https://box.kancloud.cn/2016-02-22_56cafce058543.png) 圖 5.3 放入畫布后的根窗口 這里需要對 c.pack()所用到的“點表示法”加以說明。過去,當我們編寫了一個函數f()來操作數據 x,傳統的表示法是 f(x)。而在面向對象編程中,數據和操作被結合在一 起形成了對象,如果要對對象中的數據執行操作,通常采用點表示法——“對象.操作”。在 c.pack()中,變量 c 表示一個 Canvas 對象,pack()是 Canvas 對象能夠響應的一個方 法,故 c.pack()就表示向對象 c 發出執行 pack()方法的請求。 > ① 像素(pixel)是能顯示的最小圖像單元,通俗說就是一個點。數字圖像是由很多點組成的。 > ② 在窗口中布置各種構件需要使用布局管理器,這里的 pack()就是一種布局管理器。詳見第 8 章。 坐標系 創建了畫布,接下來就可以在畫布上繪制各種圖形了。為了在繪圖時指定圖形的繪制位 置,Tkinter 為畫布建立了坐標系統。畫布坐標系以畫布左上角為原點,從原點水平向右為 x 軸,從原點垂直向下為 y 軸(圖 5.4)。 ![](https://box.kancloud.cn/2016-02-22_56cafce069362.png) 圖 5.4 畫布的坐標系統 坐標如果以整數給出,則度量單位是像素,例如左上角原點的坐標為(0,0),300x200的畫布的右下角坐標為(299,199)。像素是最基本、最常用的長度單位,但 Tkinter 也支持以字符串形式給出其他度量單位的長度值,例如"5c"(5 厘米)、"50m"(50 毫米)、"2i"(2 英寸)等。 圖形項的標識 一個畫布上可能創建多個圖形項①,因此需要有辦法來標識、引用其中某個圖形項,以 便對該圖形項進行處理。畫布上的圖形項有兩種標識方式: + 標識號:創建圖形項時 Tkinter 自動為圖形項賦予一個唯一的整數編號。 + 標簽:圖形項可以與字符串型的標簽(tag)相關聯,每個圖形項可以與 0、1 乃至 多個標簽相關聯,而同一個標簽可以與多個圖形項相關聯。 標簽相當于為圖形項命名,只不過一個圖形項可以有多個名字,而且不同圖形項可以有 相同的名字。為圖形項指定標簽的方法有三種:一是在創建圖形時利用選項 tags 來指定, 可以為 tags 選項提供單個字符串(單個名字),也可以提供一個字符串元組(多個名字); 二是在圖形創建之后,任何時候都可以利用畫布的 itemconfig()方法來設置;三是利用 畫布的 addtag_withtag()方法來為圖形項增添新標簽。假設我們已經創建了畫布 c,則 可以執行: ``` >>> r1 = c.create_rectangle(20,20,100,80,tags="#1") >>> r2 = c.create_rectangle(40,50,200,180,tags=("myRect","#2")) >>> c.itemconfig(r1,tags=("myRect","rectOne")) >>> c.addtag_withtag("ourRect","rectOne") ``` > ① 每個圖形項可以理解成一個圖形對象(有自己的屬性和操作),不過 Tkinter 沒有采用為每種圖形提供單 獨的類來創建圖形對象的實現方式。5.4.2 中介紹的 graphics 庫則采用了更符合面向對象概念的實現。 其中第一行的含義是在畫布 c 上創建了一個矩形(稍后詳述),create_rectangle()返 回的標識號被賦值給變量 r1,同時將該矩形與標簽"#1"相關聯。同樣地,第二行創建了另 一個矩形,該矩形的標識號被賦值給變量 r2,該矩形還與兩個標簽"myRect"和"#2"相關 聯。第三行的含義是將第一個矩形的標簽重新設置為"myRect"和"rectOne"(注意原標簽"#1"即告失效),這里使用了標識號 r1 來引用第一個矩形。第四行的含義是為具有標簽 "rectOne"的圖形項(即第一個矩形)添加一個新標簽"ourRect",這里使用了標簽來引 用第一個矩形。至此,第一個矩形與 3 個標簽"myRect"、"rectOne"和"ourRect"相關 聯,其中任何一個都可用于引用該圖形。注意,標簽"myRect"同時引用兩個矩形。 Canvas 還預定義了 ALL(或"all")標簽,此標簽與畫布上的所有圖形項相關聯。 畫布對象的方法 上面例子中介紹了畫布對象的 itemconfig()和 addtag_withtag()方法,除此之 外,畫布對象還提供很多方法用于對畫布上的圖形項進行各種各樣的操作。將圖形項的標識 號或標簽作為參數傳遞給畫布對象的方法,即可指定被操作的圖形項。下面再介紹幾個畫布 對象的常用方法。 gettags()方法可用于獲取與給定圖形項相關聯的所有標簽。例如下面的語句顯示標 識號為 r1 的圖形項的所有關聯標簽: ``` >>> print c.gettags(r1) ('myRect', 'rectOne', 'ourRect') ``` find_withtag()方法可用于獲取與給定標簽相關聯的所有圖形項。例如下面的語句顯示與"myRect"標簽相關聯的所有圖形項,返回結果為各圖形項的標識號所構成的元組: ``` >>> print c.find_withtag("myRect") (1,2) ``` delete()方法用于從畫布上刪除指定的圖形項。例如下面的語句從畫布上刪除第一個矩形: ``` >>> c.delete(r1) ``` move()方法用于在畫布上移動指定圖形。例如,為了將第二個矩形在 x 方向移動 10像素,在 y 方向移動 20 像素,可以執行下列語句: ``` >>> c.move(r2,10,20) ``` 讀者可查閱 Tkinter 資料以了解更多的畫布對象方法。
                  <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>

                              哎呀哎呀视频在线观看