#coding=utf-8
from tkinter import *
import random
class Application(Frame):
def __init__(self,master=None):
super().__init__(master)
self.pack()
self.createWidget()
def createWidget(self):
#创建画布
self.c1=Canvas(self,width=300,height=200,bg="green")
self.c1.pack()
#画直线
'''
前两个10,10代表坐标(10,10),中间两个20,20代表坐标(20,20),后两个30,40代表(30,40)
画直线就是将这些坐标连接起来
'''
self.c1.create_line(10,10,20,20,30,40)
#画矩形
'''
前两个50,50代表坐标(50,50),后两个100,100代表坐标(100,100)
画矩形就是找到左上角的坐标和右下角的坐标,然后连接起来
'''
self.c1.create_rectangle(50,50,100,100)
#画椭圆形
'''
前两个50,50代表坐标(50,50),后两个100,100代表坐标(100,100)
画椭圆形就是找到矩形左上角的坐标和右下角的坐标,然后再矩形形状下画切片圆
'''
self.c1.create_oval(50,50,100,100)
#画布中添加图片
#要定义photo对象为全局变量才可以引用,或者定义为当前对象的self.photo=PhotoImage()
global photo
photo=PhotoImage(file="./imgs/logo.gif")
self.c1.create_image(150,170,image=photo) #注:添加图片也要传入坐标值指定位置添加,否则报错:IndexError: tuple index out of range
#创建按钮
self.b1=Button(self,text="画10个矩形",command=self.createRectangle)
self.b1.pack(side="left")
#画10个矩形方法
def createRectangle(self):
for i in range(10):
x1=random.randrange(int(self.c1["width"])/2)
y1=random.randrange(int(self.c1["height"])/2)
x2=x1+random.randrange(int(self.c1["width"])/2)
y2=y1+random.randrange(int(self.c1["height"])/2)
self.c1.create_rectangle(x1,y1,x2,y2)
if __name__=="__main__":
root=Tk()
root.title("画布组件canvas")
root.geometry("400x300+200+300")
app=Application(root)
root.mainloop()

canvas画布1.png

canvas画布2.png
网友评论