Python的Tkinter与Canvas

Python GUI编程

Python提供了多个图形开发界面的库,几个常用Python GUI库如下:

  • Tkinter:Tk接口是Python的标准Tk GUI工具包的接口
  • wxPython:一款开源软件,是Python语言一套优秀的GUI图形库。
  • Jython:Jython程序可以和Java无缝集成。

Tkinter编程

创建一个GUI程序

  • 1、导入Tkinter模块
  • 2、创建控件
  • 3、指定这个控件的master,即这个控件属于哪一个
  • 4、告诉GM(geometry manager)有一个空间产生了
#导入Tkinter模块
from tkinter import *
#创建窗口
root=Tk()
#创建并添加Canvas
cv=Canvas(root,background='white')
#对窗口中的容器进行布局
cv.pack(expand=YES,fill=BOTH)
#在Canvas中❀线段
#创建线段时参数(x0,y0,x1,y1)  x0,y0是起点,x1,y1是终点
cv.create_line(20,30,200,30,fill='red',width=2)
#进入消息循环
mainloop()

结果:
在这里插入图片描述

关于mainloop()

1、mainloop()方法允许程序循环执行,并进入等待和处理事件。
窗口中的组件可以理解围殴一个连环画。
2、mainloop()方法的作用是监控每个组件,当组件发生变化或是触发时间时,会立即更新窗口。

Tkinter组件

Tkinter提供各种控件,如按钮、标签和文本框等。

控件描述
Button按钮控件;在程序中显示按钮。
Canvas画布控件;显示图形元素如线条或文本
Checkbutton多选框控件;用于在程序中提供多项选择框
Entry输入控件;用于显示简单的文本内容
Frame框架控件,用于在屏幕上显示一个矩形区域,多用来作为容器
Label标签控件;用于显示文本和位图
Listbox列表框控件;用于显示一个字符串列表给用户
Menu菜单控件;用于显示菜单栏、下拉菜单和弹出菜单
Message消息控件;用于显示多行文本,与标签类似
Radiobutton单选按钮控件;用于显示一个单选按钮的状态
Scale范围控件;用于显示一个数值刻度,表示输出的范围
Scrollbar滚动条控件;用来提供一个单独的对话框,与Frame类似
Text文本控件;用于显示多行文本
Toplevel容器控件;用来土工一个单独的对话框 ,与Frame类似
Spinbox微调框控件;与Entry类似,但是可以指定输入范围值
PanedWindow管理窗口布局控件;可以包含一个或者多个子控件
LabelFrame简单的容器控件;常用于复杂的窗口布局
messagebox用于显示应用程序的消息框

标准属性

标准属性就是所有控件的共同属性,如大小,字体和颜色等等。

属性描述
Dimension控件大小
Color控件颜色
Font控件字体
Anchor锚点
Relief控件样式
Bitmap位图
Cursor光标

几何管理

Tkinter控件有特定的集合状态管理方法,管理整个空间区域组织:

几何方法描述
pack()包装 ;通过调用这个方法把控件打包到父控件容器中
grid()网格;通过设置row和column属性,让控件自动对齐到网格
place()位置

pack()属性

属性描述
expandexpand=1或expand=”YES",表示放置在剩余空闲位置上的中央
expand=0或expand=“no”,表示默认不扩展
fillfill=“x”,表示横向填充
fill=“y”,表示纵向填充
fill=“both”,表示横向纵向都填充
side当side="left"或side="right"时,fill=“x” 不起作用,只能填充y
当side="top"或side="bottom"时,fill="y"不起作用,只能填充x
anchor组件的对齐方式,顶对齐’n’,底对齐‘ s ‘,左 ’w‘,右’e’
after将组件置于其他组件之后
before将组件置于其他组件之前

grid()属性

属性描述
column组件所在的列起始位置
columnspam组件的列宽
row组件所在的行起始位置
rowspam组件的行宽

place()属性

属性描述
anchor组件对齐方式
x组件左上角x坐标
y组件右上角的y坐标
relx组件相对于窗口的x坐标,应为0-1之间的小数
rely组件相对于窗口的y坐标,应为0-1之间的小数
width组件的宽度
height组件的高度
relwidth组件相对于窗口的高度,0-1
relheight组件相对于窗口的高度,0-1

Canvas画布

Canvas语法

格式:

cv=Canvas(master,option=value,...)
  • master:画布的父容器
  • options:可选项,即该画布的可设置属性。

Canvas组件的用法,程序只需要创建并添加Canvas组件,然后调用该组件的方法来绘制图形即可。
程序示例上面已有。

Canvas属性

属性描述
bd边框宽度,单位像素,默认为2像素
bg背景色
confine如果为true(默认),画布不能滚动到可滑动的区域外。
cursor光标的形状设定,如arrow,circle,cross,plus等
height高度
highlightcolor要高亮的颜色
width画布在X坐标轴上的大小。

Canvas提供绘制图形方法:

Canvas的坐标系统是绘画的基础,其中点(0,0)位于Canvas组件的左上角,X轴水平向右延申,Y轴垂直向下延申。

(1)line — 创建线条

指定两个点的坐标

line=canvas.create_line(x0,y0,x1,y1,...,xn,yn,options)
选项optons含义
width指定边框的宽度
state1. 指定该画布对象的状态
2. 可以是 “normal”,“disabled”(不可用,不响应事件)和 “hidden”(隐藏)
3. 默认值是 “normal”
fill1. 指定填充的颜色
2. 空字符串表示透明
joinstyle1. 指定当绘制两个相邻线段之间接口的样式
2. 该选项的值可以是:
– “round”(以连接点为圆心,1/2 width 选项设置的长度为半径绘制圆角)
– “bevel”(在连接点处对两线段的夹角平切)
– “miter”(沿着两线段的夹角延伸至一个点)
3. 默认值是 "round"
4. 如果还不理解请看下方 create_line() 函数 joinstyle 选项的图解你就秒懂了~
offset1. 指定当点画模式时填充位图的偏移
2. 该选项的值可以是:“x,y”, “#x,y”, “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, “center”
smooth1. 该选项的值为 True 时,将绘制贝塞尔样条曲线代替线段
2. 默认值为 False
splinesteps1. 当绘制贝塞尔样条曲线的时候,该选项指定由多少条折线来构成曲线
2. 默认值是 12
3. 只有当 smooth 选项为 True 时该选项才能生效
state1. 指定该画布对象的状态
2. 可以是 “normal”,“disabled”(不可用,不响应事件)和 “hidden”(隐藏)
3. 默认值是 “normal”
stipple1. 指定一个位图用于填充
2. 默认值是空字符串,表示实心
tags为创建的画布对象添加标签
arrow1. 默认线段是不带箭头的
2. 你可以通过设置该选项添加箭头到线段中
3. “first” 表示添加箭头到线段开始的位置
4. “last” 表示添加箭头到线段结束的位置
5. “both” 表示两端均添加箭头
arrowshape1. 用一个三元组 (a, b, c) 来指定箭头的形状
2. a, b, c 分别代表箭头的三条边的长
3. 默认值是 (8, 10, 3)
capstyle1. 指定线段两端的样式
2. 该选项的值可以是:
– “butt”(线段的两段平切于起点和终点)
– “projecting”(线段的两段在起点和终点的位置分别延长一半 width 选项设置的长度)
– “round”(线段的两段在起点和终点的位置分别延长一半 width 选项设置的长度并以圆角绘制)
3. 默认值是 "butt"
4. 如果还不理解请看下方图解你就秒懂了~
dash1. 绘制虚线
2. 该选项值是一个整数元组,元组中的元素分别代表短线的长度和间隔
3. 例如 (3, 5) 代表 3 个像素的短线和 5 个像素的间隔
dashoffset1. 指定虚线开始的偏移位置
2. 例如当 dash=(5, 1, 2, 1),dashoffset=3,则从 2 开始画虚线
activedash当画布对象状态为 “active” 的时候,绘制虚线
activefill当画布对象状态为 “active” 的时候,填充颜色
activestipple当画布对象状态为 “active” 的时候,指定填充的位图
activewidth当画布对象状态为 “active” 的时候,指定边框的宽度
disableddash当画布对象状态为 “disabled” 的时候,绘制虚线
disabledfill当画布对象状态为 “disabled” 的时候,填充颜色
disabledstipple当画布对象状态为 “disabled” 的时候,指定填充的位图
disabledwidth当画布对象状态为 “disabled” 的时候,指定边框的宽度

(2)rectangle — 绘制矩形

指定矩形左上角和右下角点的坐标

rectangle = create_rectangle(x0,y0,x1,y1,options)
选项options含义
fill1. 指定填充的颜色
2. 空字符串表示透明
width指定边框的宽度
outline指定轮廓的颜色
state1. 指定该画布对象的状态
2. 可以是 “normal”,“disabled”(不可用,不响应事件)和 “hidden”(隐藏)
3. 默认值是 “normal”
style1. 指定该方法创建的是扇形(“pieslice”)、弓形(“chord”)还是弧形(“arc”)
2. 默认创建的是扇形
tags为创建的画布对象添加标签
stipple1. 指定一个位图用于填充
2. 默认值是空字符串,表示实心
dash1. 指定绘制虚线轮廓
2. 该选项值是一个整数元组,元组中的元素分别代表短线的长度和间隔
3. 例如 (3, 5) 代表 3 个像素的短线和 5 个像素的间隔
dashoffset1. 指定虚线轮廓开始的偏移位置
2. 例如当 dash=(5, 1, 2, 1),dashoffset=3,则从 2 开始画虚线
offset1. 指定当点画模式时填充位图的偏移
2. 该选项的值可以是:“x,y”, “#x,y”, “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, “center”
outlineoffset1. 指定当点画模式绘制轮廓时位图的偏移
2. 该选项的值可以是:“x,y”, “#x,y”, “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, “center”
outlinestipple1. 当 outline 选项被设置时,该选项用于指定一个位图来填充边框
2. 默认值是空字符串,表示黑色
activedash当画布对象状态为 “active” 的时候,绘制虚线
activefill当画布对象状态为 “active” 的时候,填充颜色
activeoutline当画布对象状态为 “active” 的时候,绘制轮廓线
activeoutlinestipple当画布对象状态为 “active” 的时候,指定填充轮廓的位图
activestipple当画布对象状态为 “active” 的时候,指定填充的位图
activewidth当画布对象状态为 “active” 的时候,指定边框的宽度
disableddash当画布对象状态为 “disabled” 的时候,绘制虚线
disabledfill当画布对象状态为 “disabled” 的时候,填充颜色
disabledoutline当画布对象状态为 “disabled” 的时候,绘制轮廓线
disabledoutlinestipple当画布对象状态为 “disabled” 的时候,指定填充轮廓的位图
disabledstipple当画布对象状态为 “disabled” 的时候,指定填充的位图
disabledwidth当画布对象状态为 “disabled” 的时候,指定边框的宽度

(3)oval — 创建一个圆,椭圆

oval = canvas.create_oval(x0,y0,x1,y1,options)

椭圆、圆的绘制需要指定两个点的坐标,分别作为矩形左上角点和右下角点的坐标来确定一个矩形,而该方法负责绘制该矩形的内切椭圆。

(4)arc — 绘制弧,扇形

arc = canvas.create_arc(x0,y0,x1,y1,options)

绘制弧和绘制椭圆的用法相似,因为弧是椭圆的一部分,因此同样也是指定左上角和右下角两个点的坐标,默认总是绘制从3点(0)开始,逆时针旋转90°的那一段弧。可以同时start改变起始角度,也可通过extent改变转过的角度。

选项options含义
fill1. 指定填充的颜色
2. 空字符串表示透明
width指定边框的宽度
outline指定轮廓的颜色
state1. 指定该画布对象的状态
2. 可以是 “normal”,“disabled”(不可用,不响应事件)和 “hidden”(隐藏)
3. 默认值是 “normal”
style1. 指定该方法创建的是扇形(“pieslice”)、弓形(“chord”)还是弧形(“arc”)
2. 默认创建的是扇形
tags为创建的画布对象添加标签
stipple1. 指定一个位图用于填充
2. 默认值是空字符串,表示实心
dash1. 指定绘制虚线轮廓
2. 该选项值是一个整数元组,元组中的元素分别代表短线的长度和间隔
3. 例如 (3, 5) 代表 3 个像素的短线和 5 个像素的间隔
dashoffset1. 指定虚线轮廓开始的偏移位置
2. 例如当 dash=(5, 1, 2, 1),dashoffset=3,则从 2 开始画虚线
offset1. 指定当点画模式时填充位图的偏移
2. 该选项的值可以是:“x,y”, “#x,y”, “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, “center”
outlineoffset1. 指定当点画模式绘制轮廓时位图的偏移
2. 该选项的值可以是:“x,y”, “#x,y”, “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, “center”
outlinestipple1. 当 outline 选项被设置时,该选项用于指定一个位图来填充边框
2. 默认值是空字符串,表示黑色
activedash当画布对象状态为 “active” 的时候,绘制虚线
activefill当画布对象状态为 “active” 的时候,填充颜色
activeoutline当画布对象状态为 “active” 的时候,绘制轮廓线
activeoutlinestipple当画布对象状态为 “active” 的时候,指定填充轮廓的位图
activestipple当画布对象状态为 “active” 的时候,指定填充的位图
activewidth当画布对象状态为 “active” 的时候,指定边框的宽度
disableddash当画布对象状态为 “disabled” 的时候,绘制虚线
disabledfill当画布对象状态为 “disabled” 的时候,填充颜色
disabledoutline当画布对象状态为 “disabled” 的时候,绘制轮廓线
disabledoutlinestipple当画布对象状态为 “disabled” 的时候,指定填充轮廓的位图
disabledstipple当画布对象状态为 “disabled” 的时候,指定填充的位图
disabledwidth当画布对象状态为 “disabled” 的时候,指定边框的宽度

(5)polygon — 绘制多边形

polygon = canvas.create_polygon(x1,y1,x2,y2,x3,y3...,options)

x1,y1,x2,y2,x3,y3,…分别为多边形顶点的坐标

选项options含义
fill1. 指定填充的颜色
2. 空字符串表示透明
width指定边框的宽度
outline指定轮廓的颜色
state1. 指定该画布对象的状态
2. 可以是 “normal”,“disabled”(不可用,不响应事件)和 “hidden”(隐藏)
3. 默认值是 “normal”
style1. 指定该方法创建的是扇形(“pieslice”)、弓形(“chord”)还是弧形(“arc”)
2. 默认创建的是扇形
tags为创建的画布对象添加标签
stipple1. 指定一个位图用于填充
2. 默认值是空字符串,表示实心
dash1. 指定绘制虚线轮廓
2. 该选项值是一个整数元组,元组中的元素分别代表短线的长度和间隔
3. 例如 (3, 5) 代表 3 个像素的短线和 5 个像素的间隔
joinstyle1. 指定当绘制两个相邻线段之间接口的样式
2. 该选项的值可以是:
– “round”(以连接点为圆心,1/2 width 选项设置的长度为半径绘制圆角)
– “bevel”(在连接点处对两线段的夹角平切)
– “miter”(沿着两线段的夹角延伸至一个点)
3. 默认值是 “round”
smooth1. 该选项的值为 True 时,将绘制贝塞尔样条曲线代替线段
2. 默认值为 False
splinesteps1. 当绘制贝塞尔样条曲线的时候,该选项指定由多少条折线来构成曲线
2. 默认值是 12
3. 只有当 smooth 选项为 True 时该选项才能生效
dashoffset1. 指定虚线轮廓开始的偏移位置
2. 例如当 dash=(5, 1, 2, 1),dashoffset=3,则从 2 开始画虚线
offset1. 指定当点画模式时填充位图的偏移
2. 该选项的值可以是:“x,y”, “#x,y”, “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, “center”
outlineoffset1. 指定当点画模式绘制轮廓时位图的偏移
2. 该选项的值可以是:“x,y”, “#x,y”, “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, “center”
outlinestipple1. 当 outline 选项被设置时,该选项用于指定一个位图来填充边框
2. 默认值是空字符串,表示黑色
activedash当画布对象状态为 “active” 的时候,绘制虚线
activefill当画布对象状态为 “active” 的时候,填充颜色
activeoutline当画布对象状态为 “active” 的时候,绘制轮廓线
activeoutlinestipple当画布对象状态为 “active” 的时候,指定填充轮廓的位图
activestipple当画布对象状态为 “active” 的时候,指定填充的位图
activewidth当画布对象状态为 “active” 的时候,指定边框的宽度
disableddash当画布对象状态为 “disabled” 的时候,绘制虚线
disabledfill当画布对象状态为 “disabled” 的时候,填充颜色
disabledoutline当画布对象状态为 “disabled” 的时候,绘制轮廓线
disabledoutlinestipple当画布对象状态为 “disabled” 的时候,指定填充轮廓的位图
disabledstipple当画布对象状态为 “disabled” 的时候,指定填充的位图
disabledwidth当画布对象状态为 “disabled” 的时候,指定边框的宽度

(6)bitmap — 绘制位图

d={1:'error',2:'info',3:'question',4:'hourglass'}
for i in d:
	canvas.create_bitmap((40*i,80),bitmap=d[i])

第一个参数为一个点(x,y)指定位图存放位置的左上位置

选项options含义
background1. 指定背景颜色
2. 即在位图中值为 0 的点的颜色
3. 空字符串表示透明
bitmap指定显示的位图
anchor1. 指定位图在 position 参数的相对位置
2. “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, 或 “center” 来定位(ewsn代表东西南北,上北下南左西右东)
3. 默认值是 “center”
state1. 指定该画布对象的状态
2. 可以是 “normal”, “disabled” (不可用,不响应事件)和 “hidden”(隐藏)
3. 默认值是 “normal”
foreground1. 指定前景颜色
2. 即在位图中值为 1 的点的颜色
tags为创建的位图对象添加标签
activebackground指定当位图对象状态为 “active” 时候的背景颜色
activebitmap指定当位图对象状态为 “active” 时候填充的位图
activeforeground指定当位图对象状态为 “active” 时候的前景颜色
disabledbackground指定当位图对象状态为 “disabled” 时候的背景颜色
disabledbitmap指定当位图对象状态为 “disabled” 时候填充的位图
disabledforeground指定当位图对象状态为 “disabled” 时候的前景颜色

(7)GIF — 绘制GIF图像

img = PhotoImage(file='d:/1.pgn')
cv.create_image((150,150),image=img)
#先使用PhotoImage创建GIF图像,再将image属性来设置为新创建的img
选项options含义
anchor1. 指定位图在 position 参数的相对位置
2. “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, 或 “center” 来定位(ewsn代表东西南北,上北下南左西右东)
3. 默认值是 “center”
image指定要显示的图片
state1. 指定该图片对象的状态
2. 可以是 “normal”, “disabled” (不可用,不响应事件)和 “hidden”(隐藏)
3. 默认值是 “normal”
tags为创建的图片对象添加标签
activeimage指定当图片对象状态为 “active” 时候显示的图片
disabledimage指定当图片对象状态为 “disabled” 时候显示的图片

(8) text — 绘制文字

text=canvas.create_text((x0,y0),text='Hello Text')
选项options含义
fill指定文本的颜色
font指定文本的字体、尺寸等信息
justify1. 指定对于多行文本的对齐方式
2. 该选项可以使用的值有:“left”(默认)、“center” 和 “right”
offset1. 指定当点画模式时填充位图的偏移
2. 该选项的值可以是:“x,y”, “#x,y”, “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, “center”
state1. 指定该画布对象的状态
2. 可以是 “normal”,“disabled”(不可用,不响应事件)和 “hidden”(隐藏)
3. 默认值是 “normal”
stipple1. 指定一个位图用于填充
2. 默认值是空字符串,表示实心
tags为创建的位图对象添加标签
text指定该文本对象将要显示的文本内容
width1. 如果指定该选项,则文本会在该宽度处自动断行
2. 如果不指定该选项,文本对象的宽度等于文本最长行的长度
anchor1. 指定文本在 position 参数的相对位置
2. “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, 或 “center” 来定位(ewsn代表东西南北,上北下南左西右东)
3. 默认值是 “center”
activefill指定当文本对象状态为 “active” 时候文本的颜色
activestipple指定当文本对象状态为 “active” 时候文本填充的位图
disabledfill指定当文本对象状态为 “disabled” 时候文本的颜色
disabledstipple指定当文本对象状态为 “disabled” 时候文本填充的位图

(9) window — 绘制组件

cv.create_window((x0,y0),options)
选项options含义
anchor1. 指定位图在 position 参数的相对位置
2. “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, 或 “center” 来定位(ewsn代表东西南北,上北下南左西右东)
3. 默认值是 “center”
height指定窗口组件的高度
state1. 指定该图片的状态
2. 可以是 “normal”,“disabled”(不可用,不响应事件)和 “hidden”(隐藏)
3. 默认值是 “normal”
tags为创建的图片对象添加标签
width指定窗口组件的宽度
window指定一个窗口组件

Canvas操作图形项的标签

通过Cnavas绘制图形后,这些图形别不是完全静态的图形,每个图形都是一个独立的对象,程序完全可以动态地修改、删除这些图形。

Canvas以”堆叠“的形式来管理这些图形,先绘制的图形位于”堆叠“的下面,后绘制的图形位于”堆叠“的上面。

为了对这些图形进行修改、删除,程序先要获得这些图形的引用。
获得图形引用有两种方式:
1、通过图形的ID,也就是Canvas执行create_xxx()方法的返回值。Canvas会依次返回1、2、3等整数作为图形的ID。

2、通过图形的tag(标签)
 在Canvas中调用create_xxx()方法绘图时,可以传入一个tags选项,该选项可以为所绘制的图形添加一个或tag。
 Canvas提供如下方法来添加tag
  addtag_above(self,newtag,tagOrId) 为tagOrId对应图形的上一个图形添加新tag

  addtag_all(self,newtag) 为所有图形添加新tag

  addtag_below(self,newtag,tagOrId) 为tagOrId对应图形的下一个图形添加新tag。

  addtag_closest(self,newtag,x,y) 为和x,y点最接近的图形添加新tag

  addtag_enclosed(self,newtag,x1,y1,x2,y2) 为指定矩形区域内最上面的图形添加新tag。其中x1,y1去顶矩形区域的左上角坐标;x2,y2确定矩形区域的右下角坐标。

  addtag_overlapping(self, newtag, x1, y1, x2, y2):为与指定矩形区域重叠的最上面的图形项添加tag。

  addtag_withtag(self, newtag, tagOrId):为 tagOrId 对应图形项添加新 tag。

 Canvas 提供了如下方法来删除图形项的tag

  dtag(self, *args):删除指定图形项的tag。

 Canvas提供如下方法获取图形的所有tag

  gettags(self, *args):获取指定图形项的所有tag。

 Canvas 提供了如下方法根据 tag 来获取其对应的所有图形项

  find_withtag(self, tagOrId):获取tagOrId 对应的所有图形项。

颜色

在这里插入图片描述

  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值