tkinter是什么?
tkinter是Python标准图形库,是一个功能强大的图形用户界工具包,能够用来开发图形化界面,如应用程序中的窗口,按钮,菜单等
使用方法
首先,我们应该从导入tkinter库, 并创建自己的根窗口作为容器
import tkinter as tk
window = tk.Tk()
window.title("My Window") # 设置窗口的名称
使用内置的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为隐藏,默认为normaldash
-> 设置轮廓线为虚线,接受参数为元组,第一个画的像素,第二个为跳过多少像素
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') # 不会显示出来
create_oval -- 创建椭圆
create_oval(x1,y1,x2,y2,options)
其中(x1,y1), (x2,y2)对应的位置如箭头指向:
options:
tags
-> 设置标签,可以用于查找outline
-> 设置轮廓fill
-> 设置填充颜色,为字符串width
-> 设置轮廓宽度state
-> 设置图像的状态,hidden为隐藏,默认为normaldash
-> 设置轮廓线为虚线,接受参数为元组,第一个画的像素,第二个为跳过多少像素
c.create_oval(100,100,200,200, outline='red',width=4, fill='green', dash=(3,4))
create_arc --创建弧形
create_arc(x1,y1,x2,y2,options)
坐标的定义与create_oval
类似,不再赘述
options:
start
-> 弧形开始的角度extent
-> 从开始位置旋转过的角度style
-> 定义类型 arc, chord, pieslicewidth
-> 线的宽度fill
-> 填充颜色,但只有 pieslice和chord有state
-> 设置图像的状态,hidden为隐藏,默认为normaldash
-> 设置轮廓线为虚线,接受参数为元组,第一个画的像素,第二个为跳过多少像素
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')
create_text -- 创建文字
create_text(x,y,options)
位置为书写文字的中间
options:
text
-> 需要显示的文字font
-> 需要显示的字体anchor
-> 定位的位置有E,S,W,N以及两两组合,默认为Nstate
-> 控制是否显示width
-> 控制文本宽度justify
-> 控制多行文本的对齐方式,其值为LEFT, CENTER,RIGHT, 默认为LEFT
c.create_text(200,200,text='Welcome here to learn python', font='mocano', justify=tk.LEFT)
create_image -- 显示图像
create_image(x,y,options)
x, y 与anchor定义的方向有关,默认为N
img = tk.PhotoImage(file='./1.gif')
c.create_image(250,100,image=img)
首先,我们需要定义一个img,然后以参数的形式传递给函数即可,注意,PhotoImage只能使用.gif
的图片,使用其他类型的,可以使用PIL
中的Image
类
其他函数
- move
Canvas.move(object,dx,dy)
移动以及创建的对象,x轴移动dx,y轴移动dy
- delete
Canvas.delete(object)
删除对应的对象
- itemconfig
Canvas.itemconfig(object, options)
重新对对象进行设置,比如之前提到的fill
, bg
等等
- gettags
Canvas.gettags(object)
获取对象的属性
- find_withtag
Canvas.find_withtag(tag)
以标签来寻找到对应的对象的标识号(定义的每个对象返回的均为一个标识号,一般为整数)
练习
学习了上面的内容,我们便可以通过tkinter来进行简单的绘画了,下面我们来看看:
输入本金a,年利率i,年数n.计算今后n年的增值情况,计算公式是
a*((1+i)**n)
, 并用柱状图表示(例如可画成下面形状).注意最大高度应随a,i,n而定.
简单版:固定n为常数(如10年).
Answer
import tkinter
def draw(a,i,n):
root = tkinter.Tk()
root.title(" {} 年内的增值情况".format(n))
height = 600
height_scale = a*((1+i)**n)/(height*0.9) # 最大高度占总高度的 90%
width = 1000
canvas = 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 = space
rect_width = 2*space # 每个矩形的宽度
for j in range(0,n): # 每年
x = a*((1+i)**j)/height_scale
canvas.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()
pass
def main():
try:
a = float(input("请输入本金: "))
i = float(input("请输入年利率: "))
n = int(input("请输入年数: "))
except:
print("输入错误,请重新输入")
else:
draw(a,i,n)
if __name__ == '__main__':
main()