图形化界面的开发(GUI):Tkinter库的使用-5(Menu+Canvas+Scale+Scrollbar)

前言

本篇文章主要介绍python第三方库Tkinter库的使用,包括Menu(菜单)控件,Canvas(画布)控件和Scale(滑动)控件以及Scrollbar(滚动条)控件,它们的常用属性和方法以及具体的示例和相应的效果图。

导航

pillow库的使用篇

Tkiner库的使用篇

图片脚本篇

Meau控件

Meau(菜单控件)用于创建菜单栏,下拉菜单,上下文菜单等等,它通常位于窗口的顶部,包含多个菜单项,每个菜单项又可以有自己的下拉菜单。

常用属性

方法/属性说明
add_cascade()添加一个父菜单,将一个指定的子菜单,通过 menu 参数与父菜单连接,从而创建一个下拉菜单。
add_checkbutton()添加一个多选按钮的菜单项
add_command()添加一个普通的命令菜单项
add_radiobutton()添加一个单选按钮的菜单项
add_separator()添加一条分割线
add(add(itemType, options))添加菜单项,此处 itemType 参数可以是以下几种:“command”、“cascade”, “checkbutton”、“radiobutton”、“separator” 五种,并使用 options 选项来设置 菜单其他属性。
delete(index1, index2=None)1. 删除 index1 ~ index2(包含)的所有菜单项 2. 如果忽略 index2 参数,则删除 index1 指向的菜单项
index(index)返回与 index 参数相应的选项的序号
insert(index, itemType, options)插入指定类型的菜单项到 index 参数指定的位置,类型可以是 是:“command”,“cascade”,“checkbutton”,“radiobutton” 或 “separator” 中的一个,或者也可以使用 insert_类型() 形式来, 比如 insert_cascade(index, options)等
post(x, y)在指定的位置显示弹出菜单
type(index)获得 index 参数指定菜单项的类型
unpost()移除弹出菜单
yposition(index)返回 index 参数指定的菜单项的垂直偏移位置

Meau控件的直接参数:

属性说明
accelerator1. 设置菜单项的快捷键,快捷键会显示在菜单项目的右边,比如 accelerator = “Ctrl+O” 表示打开; 2. 注意,此选项并不会自动将快捷键与菜单项连接在一起,必须通过按键绑定来实现
command选择菜单项时执行的 callback 函数
label定义菜单项内的文字
menu此属性与 add_cascade() 方法一起使用,用来新增菜单项的子菜单项
selectcolor指定当菜单项显示为单选按钮或多选按钮时选择中标志的颜色
state定义菜单项的状态,可以是 normal、active 或 disabled
onvalue/offvalue1. 默认情况下,variable 选项设置为 1 表示选中状态,反之设置为 0,设置 offvalue/onvalue 的值可以自定义未选中状态的值 2.
tearoff1. 如果此选项为 True,在菜单项的上面就会显示一个可选择的分隔线; 2. 注意:分隔线会将此菜单项分离出来成为一个新的窗口
underline设置菜单项中哪一个字符要有下画线
value1. 设置按钮菜单项的值 2. 在同一组中的所有按钮应该拥有各不相同的值 3. 通过将该值与 variable 选项的值对比,即可判断用户选中了哪个按钮
variable当菜单项是单选按钮或多选按钮时,与之关联的变量

示例

import tkinter as tk
'''
先创建菜单中的所有菜单项,然后将菜单添加到菜单栏中,最后将菜单栏添加到主窗口上。
'''
window = tk.Tk()
window.title("菜单栏")
# 创建菜单栏
menubar =tk.Menu(window)
# 创建文件菜单
filemenu = tk.Menu(menubar, tearoff=0) # tearoff=0表示菜单项不可拆分
filemenu.add_command(label="新建", command=lambda: print("新建"))
filemenu.add_command(label="打开", command=lambda: print("打开"))
filemenu.add_separator() # 添加分割线
filemenu.add_command(label="关闭", command=window.quit)

# 将文件菜单添加到菜单栏
menubar.add_cascade(label='文件',menu=filemenu)

# 创建编辑菜单
editmenu = tk.Menu(menubar, tearoff=1)
editmenu.add_command(label="撤销", command=lambda: print("撤销"))
editmenu.add_separator()
editmenu.add_command(label="剪切", command=None)
editmenu.add_command(label="复制", command=None)
editmenu.add_checkbutton(label="粘贴", command=None)
editmenu.add_radiobutton(label="全选", command=None)
# 将编辑菜单添加到菜单栏
menubar.add_cascade(label='编辑',menu=editmenu)

# 将菜单栏显示在主窗口上
window.config(menu=menubar)

window.mainloop()

效果

在这里插入图片描述

Canvas控件

画布(Canvas)控件可以用来绘制线条、矩形、椭圆、多边形等各种几何图形,也可以制作动画,还能放置文本和图像等等。

常用属性

方法说明
create_line(x0, y0, x1, y1, … , xn, yn, options)1. 根据给定的坐标创建一条或者多条线段; 2. 参数 x0,y0,x1,y1,…,xn,yn 定义线条的坐标; 3. 参数 options 表示其他可选参数
create_oval(x0, y0, x1, y1, options)1. 绘制一个圆形或椭圆形; 2. 参数 x0 与 y0 定义绘图区域的左上角坐标;参数 x1 与 y1 定义绘图区域的右下角坐标; 3. 参数 options 表示其他可选参数
create_polygon(x0, y0, x1, y1, … , xn, yn, options)1. 绘制一个至少三个点的多边形; 2. 参数 x0、y0、x1、y1、…、xn、yn 定义多边形的坐标; 3. 参数 options 表示其他可选参数
create_rectangle(x0, y0, x1, y1, options)1. 绘制一个矩形; 2. 参数 x0 与 y0 定义矩形的左上角坐标;参数 x 与 y1 定义矩形的右下角坐标; 3. 参数 options 表示其他可选参数
create_text(x0, y0, text, options)1. 绘制一个文字字符串。其中 2. 参数 x0 与 y0 定义文字字符串的左上角坐标,参数 text 定义文字字符串的文字; 3. 参数 options 表示其他可选参数
create_image(x, y, image)1. 创建一个图片; 2. 参数 x 与 y 定义图片的左上角坐标; 3. 参数 image 定义图片的来源,必须是 tkinter 模块的 BitmapImage 类或 PhotoImage 类的实例变量。
create_bitmap(x, y, bitmap)1. 创建一个位图; 2. 参数 x 与 y 定义位图的左上角坐标; 3. 参数 bitmap 定义位图的来源,参数值可以是 gray12、gray25、gray50、gray75、hourglass、error、questhead、info、warning 或 question,或者也可以直接使用 XBM(X Bitmap)类型的文件,此时需要在 XBM 文件名称前添加一个 @ 符号,例如 bitmap=@hello.xbm
create_arc(coord, start, extent, fill)1. 绘制一个弧形; 2. 参数 coord 定义画弧形区块的左上角与右下角坐标; 3. 参数 start 定义画弧形区块的起始角度(逆时针方向); 4. 参数 extent 定义画弧形区块的结束角度(逆时针方向); 5. 参数 fill 定义填充弧形区块的颜色。

示例

import tkinter as tk

window = tk.Tk()
window.title('Canvas')
# 创建画布
canvas = tk.Canvas(window, width=500, height=500, bg='floralwhite')
canvas.pack()

# 绘制矩形
canvas.create_rectangle(100, 100, 300, 300, fill='blue')
# 绘制圆
canvas.create_oval(200, 200, 300, 300, fill='red')
# 绘制线
canvas.create_line(100, 100, 300, 300, fill='black')
# 绘制文字
canvas.create_text(200, 200, text='小小啊python', font=('font/jian.ttf', 18), fill='pink')

window.mainloop()

效果

在这里插入图片描述

Scale控件

Scale(滑块)控件允许用户通过拖动滑块在一个指定的数值范围内选择一个值。

常见属性

参数说明
from_设置滑块最顶(左)端的位置 2. 默认值是 0
to设置滑块最底(右)端的位置 2. 默认值是 100
command指定一个函数,每当滑块发生改变的时候都会自动调用该函数
font指定滑块左侧的 Label 和刻度的文字字体
activebackground指定当鼠标在上方飘过的时候滑块的背景颜色
highlightcolor指定当 Scale 获得焦点的时候高亮边框的颜色
label你可以在垂直的 Scale 组件的顶端右侧(水平的话是左端上方)显示一个文本标签
lengthScale 组件的长度,默认值是 100 像素
orient设置 Scale 控件是水平放置(HORIZONTAL)还是垂直放置(VERTICAL),默认值是 VERTICAL(垂直放置)

| resolution | 指定 Scale 组件的分辨率(每点击一下移动的步长),默认值是 1 |
| showvalue | 设置是否显示滑块旁边的数字 2. 默认值为 True |
| sliderlength | 设置滑块的长度 2. 默认值是 30 像素 |
| state | 默认情况下 Scale 组件支持鼠标事件和键盘事件,可以通过设置该选项为 DISABLED 来禁用此功能 2. 默认值是 NORMAL |
| tickinterval | 设置显示的刻度,如果设置一个值,那么就会按照该值的倍数显示刻度,默认值是不显示刻度 |
| variable |指定一个与 Scale 组件相关联的 Tkinter 变量,该变量存放滑块最新的位置, 当滑块移动的时候,该变量的值也会发生相应的变化 |
| width | 1. 指定 Scale 组件的宽度 2. 默认值是 15 像素 |

示例

import tkinter as tk
# 定义回调函数
def show_val(event):
    val = '滑块的值为' + str(var.get())
    label.config(text=val)

window = tk.Tk()
# 创建 IntVar 对象
var = tk.IntVar()
window.title("Scale")
window.geometry("300x300")
# 创建 Scale 控件
scale = tk.Scale(window, from_=0, to=100, variable=var,  orient=tk.VERTICAL, length=200, resolution=1,activebackground='red')
# 设置初始值为50
scale.set(50)
# 绑定事件
scale.bind("<ButtonRelease-1>",show_val)
scale.pack(padx=10, pady=10)
label = tk.Label(window,text="")
label.pack()
# 运行主循环
window.mainloop()

效果

在这里插入图片描述

Scrollbar控件

Scrollbar(滚动条)控件用于为其他可滚动的控件(如Listbox,Text,Canvas等)添加滚动效果,它通过滑块或者点击箭头来查看超出控件可见区域的内容。

常见属性

属性/方法说明
activebackground指定当鼠标在上方飘过的时候滑块和箭头的背景颜色,默认由系统决定
activerelief指定当鼠标在滑块上方飘过时滑块的样式,默认值是 “raised”,其他可选值有 “flat”,“sunken”,“groove”,“ridge”
background(bg)指定背景颜色,默认值由系统指定
command当滚动条更新时回调的函数,通常指定对应组件的 xview() 或 yview() 方法
cursor指定当鼠标在上方飘过的时的鼠标样式,默认值由系统指定
elementborderwidth1. 指定滚动条和箭头的边框宽度 2. 默认值是 -1(表示使用 borderwidth 选项的值)
jump1. 指定当用户拖拽滚动条时的行为 2. 默认值为 False,滚动条的任何一丝变动都会即刻调用 command 指定的回调函数 3. 设置为 True 则当用户松开鼠标才调用
orient指定绘制 “horizontal”(垂直滚动条)还是 “vertical”(水平滚动条),默认值是 VERTICAL
troughcolor指定凹槽的颜色,默认由系统指定
width指定滚动条的宽度,默认值是 16px

示例

import tkinter as tk

# 创建主窗口
window = tk.Tk()
window.title("Scrollbar")

# 创建 Scrollbar 控件
scrollbar = tk.Scrollbar(window, orient=tk.VERTICAL,cursor="hand2",activerelief="flat",width=13)
# 设置 Scrollbar 方向为纵向,放在窗口右侧
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

# 创建 Listbox 控件
listbox = tk.Listbox(window, yscrollcommand=scrollbar.set)
for i in range(100):
    listbox.insert(tk.END, f"数字 {i}")
listbox.pack(side=tk.LEFT, fill=tk.BOTH)

# 将 Scrollbar 与 Listbox 关联
scrollbar.config(command=listbox.yview)

# 运行主循环
window.mainloop()

效果

在这里插入图片描述

共勉

路虽远,行则将至;事虽难,做则必成。

博客

  • 本人是一个渗透爱好者,不时会在微信公众号(laity的渗透测试之路)更新一些实战渗透的实战案例,感兴趣的同学可以关注一下,大家一起进步。
  • 之前在公众号发布了一个kali破解WiFi的文章,感兴趣的同学可以去看一下,在b站(up主:laity1717)也发布了相应的教学视频
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值