01
tkinter是什么?
tkinter是Python标准图形库,是一个功能强大的图形用户界工具包,能够用来开发图形化界面,如应用程序中的窗口,按钮,菜单等
02
使用方法
首先,我们应该从导入tkinter库, 并创建自己的根窗口作为容器,之后进行的操作都是在这个根窗口上进行
import tkinter as tkwindow = tk.Tk()window.title("My Window") # 设置窗口的名称window.mainloop() # 使用该方法才会让窗口一直显示
使用内置的Canvas对象在根窗口中创建画布,并在其上进行操作,注意在上面进行的操作必须使用pack方法之后才能在上面显示出来,Canvas 上的主要参数有
width -> 控制窗口的宽度
height -> 控制窗口的高度
bg -> 控制窗口的背景颜色
c = Canvas(window, width=500,height=500, bg='white')c.pack()
在画布上,我们可以进行许多操作,对应的画布中有许多可以使用的方法:
create_rectangle -- 创建矩形
语法:
create_rectangle(x1,y1,x2,y2,options)
其中的坐标为矩形的两个对角的坐标
options:
tags -> 设置标签,可以用于查找
outline -> 设置轮廓
fill -> 设置填充颜色,为字符串
width -> 设置轮廓宽度
state -> 设置图像的状态,hidden为隐藏,默认为normal
dash -> 设置轮廓线为虚线,接受参数为元组,第一个画的像素,第二个为跳过多少像素
c.create_rectangle(10,10,100,100,outline='green', width=2)c.create_rectangle(100,200,200,300, fill='red', state='normal',dash=(3,4))c.create_rectangle(0,200,100,400,state='hidden', tag='#2') # 不会显示出来


02
create_oval -- 创建椭圆
语法:
create_oval(x1,y1,x2,y2,options)
其中(x1,y1), (x2,y2)对应的位置如箭头指向:
options:
tags -> 设置标签,可以用于查找
outline -> 设置轮廓
fill -> 设置填充颜色,为字符串
width -> 设置轮廓宽度
state -> 设置图像的状态,hidden为隐藏,默认为normal
dash -> 设置轮廓线为虚线,接受参数为元组,第一个画的像素,第二个为跳过多少像素
c.create_oval(100,100,200,200, outline='red',width=4, fill='green', dash=(3,4))


03
create_arc --创建弧形
语法:
create_arc(x1,y1,x2,y2,options)
坐标的定义与create_oval类似,不再赘述
options:
start -> 弧形开始的角度
extent -> 从开始位置旋转过的角度
style -> 定义类型 arc, chord, pieslice
width -> 线的宽度
fill -> 填充颜色,但只有 pieslice和chord有
state -> 设置图像的状态,hidden为隐藏,默认为normal
dash -> 设置轮廓线为虚线,接受参数为元组,第一个画的像素,第二个为跳过多少像素
c.create_arc(100,100,200,200, start=90, extent=90, style='pieslice', dash=(3,4), fill='grey')c.create_arc(200,200,300,300, style='arc', start=90, extent=90)c.create_arc(300,300,400,400, style='chord', start=90, extent=90, fill='grey')

04
create_text -- 创建文字
语法:
create_text(x,y,options)
位置默认为书写文字的中间位置对应的坐标
options:
text -> 需要显示的文字
font -> 需要显示的字体
anchor -> 定位的位置有E,S,W,N以及两两组合,默认为N
state -> 控制是否显示
width -> 控制文本宽度
justify -> 控制多行文本的对齐方式,其值为LEFT, CENTER,RIGHT, 默认为LEFT,类似居中,居左
c.create_text(200,200,text='Welcome here to learn python', font='Mocano', justify=tk.LEFT)

05
create_image -- 显示图像
语法:
create_image(x,y,options)
x, y 与anchor定义的方向有关,默认为N
img -> 接受一个图片对象
img = tk.PhotoImage(file='./1.gif')c.create_image(250,100,image=img)
首先,我们需要定义一个img,然后以参数的形式传递给函数即可,注意,PhotoImage只能使用.gif的图片,使用其他类型的,可以使用PIL中的Image和ImageTk类
from tkinter import *from PIL import ImageTk, Imageroot = Tk()root.title("My Window")c = Canvas(root, width=500,height=400)img1 = Image.open('./logo.png')img = ImageTk.PhotoImage(img1)c.create_image(250,100,image=img, anchor=N)c.pack(side='top')root.mainloop()
使用上述代码,可以得到如图效果

06
其他函数
01
move
Canvas.move(object,dx,dy)
移动以及创建的对象,x轴移动dx,y轴移动dy
02
delete
Canvas.delete(object)
删除对应的对象
03
itemconfig
Canvas.itemconfig(object, options)
重新对对象进行设置,比如之前提到的fill, bg等等
04
gettags
Canvas.gettags(object)
获取对象的属性
05
find_withtag
Canvas.find_withtag(tag)
以标签来寻找到对应的对象的标识号(定义的每个对象返回的均为一个标识号,一般为整数)
03
练习
学习了上面的内容,我们便可以通过tkinter来进行简单的绘画了,下面我们来看看下面的这个例题
输入本金a,年利率i,年数n.计算今后n年的增值情况,计算公式是 a*((1+i)**n), 并用柱状图表示(例如可画成下面形状).注意最大高度应随a,i,n而定.

Answer
import tkinterdef draw(a,i,n):root = tkinter.Tk()root.title(" {} 年内的增值情况".format(n))height = 600height_scale = a*((1+i)**n)/(height*0.9) # 最大高度占总高度的 90%width = 1000canvas = tkinter.Canvas(root,height=height, width=width)canvas.create_line(10,20,width-10,20,) # 最上面的线段canvas.create_line(10,height-20,width-10,height-20) # 最下面的线段space = width/(3*n+1) # 矩形间空格的大小ori_space = spacerect_width = 2*space # 每个矩形的宽度for j in range(0,n): # 每年x = a*((1+i)**j)/height_scalecanvas.create_rectangle(space,height-20-x,space+rect_width,height-20,fill='green')canvas.create_text(space+rect_width/2,height-20-x, text=round(x*height_scale,2))canvas.create_text(space+rect_width/2,height-10,text=j)space += ori_space+rect_width # 下一个x值canvas.pack()root.mainloop()passdef main():try:a = float(input("请输入本金:"))i = float(input("请输入年利率:"))n = int(input("请输入年数:"))except:print("输入错误,请重新输入")else:draw(a,i,n)if __name__ == '__main__':main()
不懂之处,可后台留言,或访问博客,在博客后提问





