前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图形化界面的开发(GUI)_Tkinter库的使用-5(Menu+Canvas+Scale+Scrollbar)

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

原创
作者头像
laity
修改2025-02-28 09:49:57
修改2025-02-28 09:49:57
55400
代码可运行
举报
文章被收录于专栏:Tkinter库的使用Tkinter库的使用
运行总次数:0
代码可运行

前言

本篇文章主要介绍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)

删除 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控件的直接参数:

属性

说明

accelerator

设置菜单项的快捷键,快捷键会显示在菜单项目的右边,比如 accelerator = "Ctrl+O" 表示打开; 2. 注意,此选项并不会自动将快捷键与菜单项连接在一起,必须通过按键绑定来实现

command

选择菜单项时执行的 callback 函数

label

定义菜单项内的文字

menu

此属性与 add_cascade() 方法一起使用,用来新增菜单项的子菜单项

selectcolor

指定当菜单项显示为单选按钮或多选按钮时选择中标志的颜色

state

定义菜单项的状态,可以是 normal、active 或 disabled

onvalue/offvalue

默认情况下,variable 选项设置为 1 表示选中状态,反之设置为 0,设置 offvalue/onvalue 的值可以自定义未选中状态的值 2.

tearoff

如果此选项为 True,在菜单项的上面就会显示一个可选择的分隔线; 2. 注意:分隔线会将此菜单项分离出来成为一个新的窗口

underline

设置菜单项中哪一个字符要有下画线

value

设置按钮菜单项的值 2. 在同一组中的所有按钮应该拥有各不相同的值 3. 通过将该值与 variable 选项的值对比,即可判断用户选中了哪个按钮

variable

当菜单项是单选按钮或多选按钮时,与之关联的变量

示例

代码语言:python
代码运行次数:0
运行
复制
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)

根据给定的坐标创建一条或者多条线段; 2. 参数 x0,y0,x1,y1,...,xn,yn 定义线条的坐标; 3. 参数 options 表示其他可选参数

create_oval(x0, y0, x1, y1, options)

绘制一个圆形或椭圆形; 2. 参数 x0 与 y0 定义绘图区域的左上角坐标;参数 x1 与 y1 定义绘图区域的右下角坐标; 3. 参数 options 表示其他可选参数

create_polygon(x0, y0, x1, y1, ... , xn, yn, options)

绘制一个至少三个点的多边形; 2. 参数 x0、y0、x1、y1、...、xn、yn 定义多边形的坐标; 3. 参数 options 表示其他可选参数

create_rectangle(x0, y0, x1, y1, options)

绘制一个矩形; 2. 参数 x0 与 y0 定义矩形的左上角坐标;参数 x 与 y1 定义矩形的右下角坐标; 3. 参数 options 表示其他可选参数

create_text(x0, y0, text, options)

绘制一个文字字符串。其中 2. 参数 x0 与 y0 定义文字字符串的左上角坐标,参数 text 定义文字字符串的文字; 3. 参数 options 表示其他可选参数

create_image(x, y, image)

创建一个图片; 2. 参数 x 与 y 定义图片的左上角坐标; 3. 参数 image 定义图片的来源,必须是 tkinter 模块的 BitmapImage 类或 PhotoImage 类的实例变量。

create_bitmap(x, y, bitmap)

创建一个位图; 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)

绘制一个弧形; 2. 参数 coord 定义画弧形区块的左上角与右下角坐标; 3. 参数 start 定义画弧形区块的起始角度(逆时针方向); 4. 参数 extent 定义画弧形区块的结束角度(逆时针方向); 5. 参数 fill 定义填充弧形区块的颜色。

示例

代码语言:python
代码运行次数:0
运行
复制
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 组件的顶端右侧(水平的话是左端上方)显示一个文本标签

length

Scale 组件的长度,默认值是 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 像素 |

示例

代码语言:python
代码运行次数:0
运行
复制
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

指定当鼠标在上方飘过的时的鼠标样式,默认值由系统指定

elementborderwidth

指定滚动条和箭头的边框宽度 2. 默认值是 -1(表示使用 borderwidth 选项的值)

jump

指定当用户拖拽滚动条时的行为 2. 默认值为 False,滚动条的任何一丝变动都会即刻调用 command 指定的回调函数 3. 设置为 True 则当用户松开鼠标才调用

orient

指定绘制 "horizontal"(垂直滚动条)还是 "vertical"(水平滚动条),默认值是 VERTICAL

troughcolor

指定凹槽的颜色,默认由系统指定

width

指定滚动条的宽度,默认值是 16px

示例

代码语言:python
代码运行次数:0
运行
复制
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)也发布了相应的教学视频

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 导航
    • pillow库的使用篇
    • 图片脚本篇
    • Tkiner库的使用篇
  • Meau控件
    • 常用属性
    • 示例
    • 效果
  • Canvas控件
    • 常用属性
    • 示例
    • 效果
  • Scale控件
    • 常见属性
    • 示例
    • 效果
  • Scrollbar控件
    • 常见属性
    • 示例
    • 效果
  • 共勉
  • 博客
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档