關於python中的canvas的信息

本文目錄一覽:

Python繪圖Turtle庫詳解

       Turtle庫是Python語言中一個很流行的繪製圖像的函數庫,想像一個小烏龜,在一個橫軸為x、縱軸為y的坐標系原點,(0,0)位置開始,它根據一組函數指令的控制,在這個平面坐標系中移動,從而在它爬行的路徑上繪製了圖形。

turtle 繪圖的基礎知識:

1. 畫布(canvas)

        畫布就是turtle為我們展開用於繪圖區域,我們可以設置它的大小和初始位置。

        設置畫布大小

 turtle.screensize(canvwidth=None, canvheight=None, bg=None),參數分別為畫布的寬(單位像素), 高, 背景顏色。

        如:turtle.screensize(800,600, “green”)

 turtle.screensize() #返回默認大小(400, 300)

        turtle.setup(width=0.5, height=0.75,

startx=None, starty=None),參數:width, height: 輸入寬和高為整數時, 表示像素; 為小數時, 表示佔據電腦屏幕的比例,(startx, starty): 這一坐標表示矩形窗口左上角頂點的位置, 如果為空,則窗口位於屏幕中心。

        如:turtle.setup(width=0.6,height=0.6)

 turtle.setup(width=800,height=800, startx=100, starty=100)

2. 畫筆

2.1 畫筆的狀態

        在畫布上,默認有一個坐標原點為畫布中心的坐標軸,坐標原點上有一隻面朝x軸正方向小烏龜。這裡我們描述小烏龜時使用了兩個詞語:坐標原點(位置),面朝x軸正方向(方向), turtle繪圖中,就是使用位置方向描述小烏龜(畫筆)的狀態。

2.2 畫筆的屬性

        畫筆(畫筆的屬性,顏色、畫線的寬度等)

        1) turtle.pensize():設置畫筆的寬度;

        2) turtle.pencolor():沒有參數傳入,返回當前畫筆顏色,傳入參數設置畫筆顏色,可以是字元串如”green”, “red”,也可以是RGB 3元組。

        3) turtle.speed(speed):設置畫筆移動速度,畫筆繪製的速度範圍[0,10]整數,數字越大越快。

2.3 繪圖命令

         操縱海龜繪圖有著許多的命令,這些命令可以劃分為3種:一種為運動命令,一種為畫筆控制命令,還有一種是全局控制命令。

(1)    畫筆運動命令

命令說明

turtle.forward(distance)向當前畫筆方向移動distance像素長度

turtle.backward(distance)向當前畫筆相反方向移動distance像素長度

turtle.right(degree)順時針移動degree°

turtle.left(degree)逆時針移動degree°

turtle.pendown()移動時繪製圖形,預設時也為繪製

turtle.goto(x,y)將畫筆移動到坐標為x,y的位置

turtle.penup()提起筆移動,不繪製圖形,用於另起一個地方繪製

turtle.circle()畫圓,半徑為正(負),表示圓心在畫筆的左邊(右邊)畫圓

setx( )將當前x軸移動到指定位置

sety( )將當前y軸移動到指定位置

setheading(angle)設置當前朝向為angle角度

home()設置當前畫筆位置為原點,朝向東。

dot(r)繪製一個指定直徑和顏色的圓點

(2)     畫筆控制命令

命令說明

turtle.fillcolor(colorstring)繪製圖形的填充顏色

turtle.color(color1, color2)同時設置pencolor=color1, fillcolor=color2

turtle.filling()返回當前是否在填充狀態

turtle.begin_fill()準備開始填充圖形

turtle.end_fill()填充完成

turtle.hideturtle()隱藏畫筆的turtle形狀

turtle.showturtle()顯示畫筆的turtle形狀

(3)    全局控制命令

命令說明

turtle.clear()清空turtle窗口,但是turtle的位置和狀態不會改變

turtle.reset()清空窗口,重置turtle狀態為起始狀態

turtle.undo()撤銷上一個turtle動作

turtle.isvisible()返回當前turtle是否可見

stamp()複製當前圖形

turtle.write(s

  [,font=(“font-name”,font_size,”font_type”)])

寫文本,s為文本內容,font是字體的參數,分別為字體名稱,大小和類型;font為可選項,font參數也是可選項

(4)    其他命令

命令說明

turtle.mainloop()或turtle.done()啟動事件循環 -調用Tkinter的mainloop函數。

必須是烏龜圖形程序中的最後一個語句。

turtle.mode(mode=None)設置烏龜模式(「standard」,「logo」或「world」)並執行重置。如果沒有給出模式,則返回當前模式。

模式初始龜標題正角度

standard向右(東)逆時針

logo向上(北)順時針

turtle.delay(delay=None)設置或返回以毫秒為單位的繪圖延遲。

turtle.begin_poly()開始記錄多邊形的頂點。當前的烏龜位置是多邊形的第一個頂點。

turtle.end_poly()停止記錄多邊形的頂點。當前的烏龜位置是多邊形的最後一個頂點。將與第一個頂點相連。

turtle.get_poly()返回最後記錄的多邊形。

python tkinter 使用canvas的問題

如果tk是正確的tkinter模塊

    

self.canvas = tk.Canvas(self.root, width=520, height=150, bg=’white’) 

                 ^大寫

方法名要寫對

請問為什麼在我的Python中使用 canvas 不顯示圖片?

搜了下,有人說是因為image被垃圾回收了

background = 後面加這句

form.a = background

這個a可以是任意的標識符

python tkinter canvas中如何使用循環

snake_body=[30,40,50]   

y=30

for s in snake_body:

canvas.create_rectangle(s,y,s+10,y+10,fill=”blue”,outline=”black”,width=2,tags=”body”)

a=1

while a==1:

    time.sleep(1)

    canvas.delete(“body”)

    del snake_body[0]

    for s in snake_body:

        canvas.create_rectangle(s,y,s+10,y+10,fill=”blue”,outline=”black”,width=2,tags=”body”)

python tkinter怎麼用canvas實現按順序畫圖

python簡述:

Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。自從20世紀90年代初Python語言誕生至今,它逐漸被廣泛應用於處理系統管理任務和Web編程。Python[1]已經成為最受歡迎的程序設計語言之一。2011年1月,它被TIOBE編程語言排行榜評為2010年度語言。自從2004年以後,python的使用率是呈線性增長。

tkinter模塊介紹

tkinter模塊(「Tk 介面」)是Python的標準Tk GUI工具包的介面.Tk和Tkinter可以在大多數的Unix平台下使用,同樣可以應用在Windows和Macintosh系統里.,Tk8.0的後續版本可以實現本地窗口風格,並良好地運行在絕大多數平台中。

由於Tkinter是內置到python的安裝包中、只要安裝好Python之後就能import Tkinter庫、而且IDLE也是用Tkinter編寫而成、對於簡單的圖形界面Tkinter還是能應付自如。

八、顯示文字

用create_text在畫布上寫字。這個函數只需要兩個坐標(文字x和y的位置),還有一個具名參數來接受要顯示的文字。例如:

from tkinter import* tk = Tk() canvas = Canvas(tk,width=400,height=400) canvas.pack() canvas.create_text(150,100,text=’Happy birthday to you’)

create_text函數還有幾個很有用的參數,比方說字體顏色等。在下面的代碼中,我們調用create_text函數時使用了坐標(130,120),還有要顯示的文字,以及紅色的填充色:

canvas.create_text(130,120,text=’Happy birthday to you!’,fill=’red’)

我們還可以指定字體,方法是給出一個包含字體名和字體大小的元組。例如大小為20的Times字體就是(’Times’,20):

canvas.create_text(150,150,text=’Happy birthday’,font=(‘Times’,15)) canvas.create_text(200,200,text=’Happy birthday’,font=(‘Courier’,22)) canvas.create_text(220,300,text=’Happy birthday’,font=(‘Couried’,30))

九、顯示圖片

要用tkinter在畫布上顯示圖片,首先要裝入圖片,然後使用canvas對象上的create_image函數。

這是我存在E盤上的一張圖片:

我們可以這樣來顯示one.gif圖片:

from tkinter import* tk = Tk() canvas = Canvas(tk,width=400,height=400) canvas.pack() my_image = PhotoImage(file=’E:\\FFOutput\\one.gif’) canvas.create_image(0,0,anchor = NW,image = my_image) canvas.create_image(50,50,anchor = NW,image = my_image)

在第五行中,把圖片裝入到變數my_image中。坐標(0,0)/(50,50)是我們要顯示圖片的位置, anchor=NW讓函數使用左上角(northwest 西北方)作為畫圖的起始點,最後一個具名參數image指向裝入的圖片。

註:用tkinter只能裝入GIF圖片,也就是擴展名是.gif的圖片文件。

想要顯示其他類型的圖片,如PNG和JPG,需要用到其他的模塊,比如Python圖像庫。

十、創建基本的動畫

創建一個填了色的三角形,讓它在屏幕上橫向移動:

import timefrom tkinter import*tk = Tk()canvas = Canvas(tk,width=400,height=200)canvas.pack()canvas.create_polygon(10,10,10,60,50,35) ##創建三角形for x in range(0,60): canvas.move(1,5,0) ##把任意畫好的對象移動到把x和y坐標增加給定值的位置 tk.update()   ##強制tkinter更新屏幕(重畫)   time.sleep(0.05) ##讓程序休息二十分之一秒(0.05秒),然後再繼續

三角形橫向移動

延伸一下,如果想讓三角形沿對角線在屏幕上移動,我們可以第8行為:

import timefrom tkinter import*tk = Tk()canvas = Canvas(tk,width=400,height=400)canvas.pack()canvas.create_polygon(10,10,10,60,50,35) ##創建三角形for x in range(0,60): canvas.move(1,5,5) ##把任意畫好的對象移動到把x和y坐標增加給定值的位置 tk.update()   ##強制tkinter更新屏幕(重畫)   time.sleep(0.05) ##讓程序休息二十分之一秒(0.05秒),然後再繼續

三角形沿對角線移動

如果要讓三角形在屏幕上沿對角線回到開始的位置,要用-5,-5(在結尾處加上這段代碼)

import timefrom tkinter import*tk = Tk()canvas = Canvas(tk,width=400,height=400)canvas.pack()canvas.create_polygon(10,10,10,60,50,35) ##創建三角形for x in range(0,60): canvas.move(1,5,5) ##把任意畫好的對象移動到把x和y坐標增加給定值的位置 tk.update()   ##強制tkinter更新屏幕(重畫)   time.sleep(0.05) ##讓程序休息二十分之一秒(0.05秒),然後再繼續for x in range(0,60): canvas.move(1,-5,-5)  tk.update()     time.sleep(0.05)

對角線運動並回到初始位置

十一、讓對象對操作有反應

我們可以用「消息綁定」來讓三角形在有人按下某鍵時有反應。

要開始處理事件,我們首先要創建一個函數。當我們告訴tkinter將某個特定函數綁到(或關聯到)某個特定事件上時就完成了綁定。

換句話說,tkinter會自動調用這個函數來處理事件。

例如,要讓三角形在按下回車鍵時移動,我們可以定義這個函數:

def movetriangle(event): canvas.move(1,5,0)

這個函數只接受一個參數(event),tkinter用它來給函數傳遞關於事件的信息。現在我們用畫布canvas上的bind_all函數來告訴tkinter當特定事件發生時應該調用這個函數。代碼如下:

from tkinter import*tk = Tk()canvas = Canvas(tk,width=400,height=400)canvas.pack()canvas.create_polygon(10,10,10,60,50,35)def movetriangle(event): canvas.move(1,5,0)canvas.bind_all(‘KeyPress-Return’,movetringle) ##讓tkinter監視KeyPress事件,當該事件發生時調用movetriangle函數

那麼我們如何根據按鍵的不同而改變三角形的方向呢?比如用方向鍵。

我們可以嘗試改下movetriangle函數:

def movetriangle(event): if event.keysym == ‘up’:  canvas.move(1,0,-3) ##第一個參數使畫布上所畫的形狀的ID數字,第二個是對x(水平方向)坐標增加的值,第三個是對y(垂直方向)坐標增加的值 elif event.keysym == ‘down’:  canvas.move(1,0,3) elif event.keysym == ‘left’:  canvas.move(1,-3,0) else  canvas.move(1,3,0)

最後代碼匯總在一起為:

from tkinter import*tk = Tk()canvas = Canvas(tk,width=400,height=400)canvas.pack()canvas.create_polygon(10,10,10,60,50,35)def movetriangle(event): if event.keysym == ‘Up’:  canvas.move(1,0,-3) ##第一個參數使畫布上所畫的形狀的ID數字,第二個是對x(水平方向)坐標增加的值,第三個是對y(垂直方向)坐標增加的值 elif event.keysym == ‘Down’:  canvas.move(1,0,3) elif event.keysym == ‘Left’:  canvas.move(1,-3,0) else:  canvas.move(1,3,0)canvas.bind_all(‘KeyPress-Up’,movetriangle) ##讓tkinter監視KeyPress事件,當該事件發生時調用movetriangle函數canvas.bind_all(‘KeyPress-Down’,movetriangle)canvas.bind_all(‘KeyPress-Left’,movetriangle)canvas.bind_all(‘KeyPress-Right’,movetriangle)

方向鍵控制三角形的移動

十二、更多使用ID的方法

只要用了畫布上面以create_開頭的函數,它總會返回一個ID。這個函數可以在其他的函數中使用。

如果我們修改代碼來把返回值作為一個變數保存,然後使用這個變數,那麼無論返回值是多少,這段代碼都能工作:

mytriangle = canvas.create_polygon(10,10,10,60,50,35) canvas.move(mytriangle,5,0)

我們可以用itemconfig來改變三角形的顏色,這需要把ID作為第一個參數:

canvas.itemconfig(mytrigle,fill=’bue’) ##把ID為變數mytriangle中的值的對象的填充顏色改為藍色

也可以給三角形一條不同顏色的輪廓線,同樣適用ID作為第一個參數:

canvas.itemconfig(mytrigle,outline=’red’)

總結做出了簡單的動畫。學會了如何用事件綁定來讓圖形響應按鍵,這在寫計算機遊戲時很有用。在tkinter中以create開頭的函數是如何返回一個ID數字。

已經學習Python兩天,最開始是想著是通過覺得用它寫個動畫或者畫個圖形比較方便,而且界面美觀,比黑洞洞的dos窗口好多了,準備寫個程序送個一女孩作為生日禮物(去年答應好的)。經過這兩天的學習,我慢慢發覺了Python語言的優點,其最主要的就是易學,而且可以調用各種庫。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/289273.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 03:02
下一篇 2024-12-24 03:02

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論