首页 > 编程语言 >软件测试|超好用超简单的Python GUI库——tkinter(十六)

软件测试|超好用超简单的Python GUI库——tkinter(十六)

时间:2023-07-26 18:33:28浏览次数:40  
标签:菜单 tkinter Python win add command menu 菜单项 软件测试

前言

我们在使用各种软件时,菜单是我们最常用的功能之一,菜单以可视化的方式将一系列的“功能选项卡”进行分组,并在每个分组下又“隐藏”了许多其他的“选项卡”。当打开菜单时,这些选项卡就会“显式”的呈现出来,方便用户进行选择,比如我们常用的QQ音乐播放器,如下图:

在这里插入图片描述

tkinter同样给我们提供了一个创建菜单的控件,Menu控件,帮助我们实现菜单的功能。

菜单控件(Menu)可以充分地节省有限的窗口区域,让我们的界面更加简洁优雅,避免臃肿、混乱。

Tkinter Menu 控件提供了三种类型的菜单,分别是:topleve(主目录菜单)、pull-down(下拉式菜单)、pop-up(弹出式菜单,或称快捷式菜单)。

创建菜单

方法 说明
add_cascade(**options) 添加一个父菜单,将一个指定的子菜单,通过 menu 参数与父菜单连接,从而创建一个下拉菜单
add_checkbutton(**options) 添加一个多选按钮的菜单项
add_command(**options) 添加一个普通的命令菜单项
add_radiobutton(**options) 添加一个单选按钮的菜单项
add_separator(**options) 添加一条分割线
add(add(itemType, options)) 添加菜单项,此处 itemType 参数可以是以下几种:"command"、"cascade","checkbutton"、"radiobutton"、"separator" 五种,并使用 options 选项来设置菜单其他属性。

菜单项操作

方法 说明
delete(index1, index2=None) 1. 删除 index1 ~ index2(包含)的所有菜单项
2. 如果忽略 index2 参数,则删除 index1 指向的菜单项
entrycget(index, option) 获得指定菜单项的某选项的值
entryconfig(index, **options) 设置指定菜单项的选项
index(index) 返回与 index 参数相应的选项的序号
insert(index, itemType, **options) 插入指定类型的菜单项到 index 参数指定的位置,类型可以是:"command","cascade","checkbutton","radiobutton"或 "separator" 中的一个,或者也可以使用 insert_类型() 形式来,比如 insert_cascade(index, **options)..等
invoke(index) 调用 index 指定的菜单项相关联的方法
post(x, y) 在指定的位置显示弹出菜单
type(index) 获得 index 参数指定菜单项的类型
unpost() 移除弹出菜单
yposition(index) 返回 index 参数指定的菜单项的垂直偏移位置

options参数介绍

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

示例

下面我们通过几个示例来介绍上述属性以及方法的使用:

创建主目录菜单

主目录菜单也称之为“顶级菜单”,下拉菜单等其他子菜单的都需要建立在“顶级菜单”的基础之上,下面示例创建了一个类似于“记事本”界面的程序,代码如下:

from tkinter import *
import tkinter . messagebox
#创建主窗口
win = Tk()
win.config(bg='#87CEEB')
win.title("拜仁慕尼黑")
win.geometry('450x350+300+200')

# 绑定一个执行函数,当点击菜单项的时候会显示一个消息对话框
def menuCommand() :
    tkinter.messagebox.showinfo("拜仁慕尼黑","你正在使用拜仁慕尼黑")
# 创建一个主目录菜单,也被称为顶级菜单
main_menu = Menu (win)
#新增命令菜单项,使用 add_command() 实现
main_menu.add_command (label="关于球队",command=menuCommand)
main_menu.add_command (label="球员",command=menuCommand)
main_menu.add_command (label="教练",command=menuCommand)
main_menu.add_command (label="欧冠",command=menuCommand)
main_menu.add_command (label="德甲联赛",command=menuCommand)
#显示菜单
win.config (menu=main_menu)
win.mainloop()

运行程序,结果如下图:

在这里插入图片描述

创建下拉菜单

下拉菜单时主菜单的重要组成部分,也是用户选择相关命令的重要交互界面,下拉菜单的创建方式也非常简单,不过需要我们注意,下拉菜单是建立的主菜单(即顶级菜单)的基础之上的,并非主窗口之上,这一点千万不要搞混,否则创建下拉菜单会失败。

#创建一个下拉式菜单
from tkinter import *
import tkinter .messagebox
#创建主窗口
win = Tk()
win.config(bg='#87CEEB')
win.title("拜仁慕尼黑")
win.geometry('450x350+300+200')

#创建一个执行函数,点击下拉菜单中命令时执行
def menuCommand() :
    tkinter .messagebox .showinfo("拜仁慕尼黑", "您正在使用拜仁慕尼黑")
#创建主目录菜单(顶级菜单)
mainmenu = Menu (win)
#在顶级菜单上新增"文件"菜单的子菜单,同时不添加分割线
filemenu = Menu (mainmenu, tearoff=False)
#新增"文件"菜单的菜单项,并使用 accelerator 设置菜单项的快捷键
filemenu.add_command (label="前锋",command=menuCommand,accelerator="Ctrl+N")
filemenu.add_command (label="中场",command=menuCommand, accelerator="Ctrl+O")
filemenu.add_command (label="后卫",command=menuCommand, accelerator="Ctrl+S")
filemenu.add_command (label="守门员",command=menuCommand, accelerator="Ctrl+G")
# 添加一条分割线
filemenu.add_separator ()
filemenu.add_command (label="退出",command=win. quit)
#在主目录菜单上新增"文件"选项,并通过menu参数与下拉菜单绑定
mainmenu.add_cascade (label="球员",menu=filemenu)
# 将主菜单设置在窗口上
win.config (menu=mainmenu)
# 绑定键盘事件,按下键盘上的相应的键时都会触发执行函数
win.bind ("<Control-n>",menuCommand)
win. bind ("<Control-N>", menuCommand)
win.bind ("<Control-o>",menuCommand)
win. bind ("<Control-O>", menuCommand)
win. bind ("<Control-s>", menuCommand)
win.bind ("<Control-S>",menuCommand)
win. bind ("<Control-g>", menuCommand)
win.bind ("<Control-G>",menuCommand)
# 显示主窗口
win.mainloop()

运行程序,结果如下:

在这里插入图片描述

创建弹出式菜单

弹出式菜单栏,也称为快捷式菜单栏,比如通过点击鼠标右键弹出一个菜单栏,其中包含一些常用的选项卡,如复制、粘贴等,代码如下:

import tkinter as tk

root = tk.Tk()
root.config(bg='#8DB6CD')
root.title("拜仁慕尼黑")
root.geometry('400x300')



def func():
    print('您通过弹出菜单执行了命令')


# 创建一个弹出菜单
menu = tk.Menu(root, tearoff=False)
menu.add_command(label="球员", command=func)
menu.add_command(label="球队", command=func)
menu.add_command(label="欧冠", command=func)
menu.add_command(label="联赛", command=func)


# 定义事件函数
def command(event):
    # 使用 post()在指定的位置显示弹出菜单
    menu.post(event.x_root, event.y_root)


# 绑定鼠标右键,这是鼠标绑定事件
# <Button-3>表示点击鼠标的右键,1 表示左键,2表示点击中间的滑轮
root.bind("<Button-3>", command)
root.mainloop()

运行程序,结果如下:

在这里插入图片描述

菜单按钮控件

Menubutton(菜单按钮控件)是一个与 Menu 控件相关联的按钮,当我们按下按钮的时候下拉菜单就会自动弹出。通过 Menubutton 创建的菜单按钮可以自由地放置在窗口中的任意位置,从而提高了GUI 界面的灵活性,代码如下:

from tkinter import *
win=Tk()
win.config(bg='#87CEEB')
win.title("拜仁慕尼黑")
win.geometry('450x350+300+200')

#创建一个菜单按钮
menubtn=Menubutton(win, text='点击进行选择', relief='sunk')
# 设置位置(布局)
menubtn.grid(padx=195, pady=105)
#添加菜单,使用 tearoff 参数不显示分割线
filemenu=Menu(menubtn,tearoff = False)
filemenu.add_command(label='球员')
filemenu.add_command(label='球队')
filemenu.add_command(label='欧冠')
filemenu.add_command(label='联赛')
# 显示菜单,将菜单命令绑定在菜单按钮对象上
menubtn.config(menu=filemenu)
win.mainloop()

运行程序,结果如下:
在这里插入图片描述

总结

本文主要介绍了tkinter菜单控件的使用,菜单控件可以使我们的程序更有层次感,更加符合用户使用习惯,后续我们将介绍tkinter滚动条控件的使用。

获取更多技术资料,请点击!

标签:菜单,tkinter,Python,win,add,command,menu,菜单项,软件测试
From: https://www.cnblogs.com/hogwarts/p/17583281.html

相关文章

  • 软件测试|SQL选取数据,你会了吗?
    前言很多时候,我们是需要从表中选择数据进行操作的,表中数据那么多,我们应该如何在表中选取数据呢?SQLSELECT语句用于从表中选取符合条件的数据,该数据以临时表的形式返回,称为结果集。SELECT基本语法SELECTcolumn1,column2,columnNFROMtable_nameWHEREconditions;col......
  • Exception: Not found: 'python/cv2/py.typed'
    CopyingfilesfromCMakeoutputcreatingdirectory_skbuild/linux-x86_64-3.6/cmake-install/cv2copying_skbuild/linux-x86_64-3.6/cmake-install/python/cv2/python-3/cv2.abi3.so->_skbuild/linux-x86_64-3.6/cmake-install/cv2/cv2.abi3.socopying_skbuild/linu......
  • 使用php调用python文件,执行切割pdf文件
    应用场景,使用php执行python文件,进行pdf文件切割代码如下:publicfunctionslicePdf(Request$request){//要传递给Python脚本的参数$inputPath="input.pdf";//需要切割的文件目录$outputPath="output.pdf";//切割完成以后得新文件......
  • Python读写JSON文件的两种方式
    1.把文件读取为字符串,然后转换为json数据(dict格式),loadsanddumps关键点:写入json文件的时候,要指定ensure_ascii参数为False,否则中文编码虽然为utf_8,但仍然无法显示中文,而是\uxxx形式的编码。new_json_string=json.dumps(json_data,ensure_ascii=False)importjsondefr......
  • Linux系统多个Python版本任意切换
    比如系统安装了两个python3版本:python3.8和python3.10update-alternatives用法:update-alternatives:--install需要<链接><名称><路径><优先级>分别设置这两个版本的python3:$ls/usr/bin/python3python3python3.10-configpython3-configpython3-pasteurize ......
  • python批量计算多站点多年标准化降水指数SPI
    前面提过如何计算单站点多年的标准化降水指数SPI,但是在现实中不仅只计算一个站点的标准化降水指数,有时要计算多个站点的。原始数据是11个站点1961年至2022年每个月的降水值: 编程思路是:1、先需要进行站点分类:   此处的难点在于需要写个for循环,根据站点名称遍历数据 ......
  • python 开发环境管理 pyenv, poetry
    下载python任何一个版本,比如python3.8安装pyenv-winlink:https://github.com/pyenv-win/pyenv-win/blob/master/docs/installation.md#add-system-settings步骤: pipinstallpyenv-win--target%USERPROFILE%\\.pyenvorpipinstallpyenv-win--target%USE......
  • Python采集主播照片,实现人脸识别, 进行颜值评分,制作颜值排行榜
    昨晚一回家,表弟就神神秘秘的跟我说,发现一个高颜值网站,非要拉着我研究一下她们的颜值高低。我心想,这还得要我一个个慢慢看,太麻烦了~于是反手用Python给他写了一个人脸识别代码,把她们的照片全部爬下来,自动检测颜值打分排名。这不比手动快多了?准备工作开发环境Py......
  • 安装easy_install 和ipython
    从链接http://pypi.python.org/pypi/setuptools#downloads处获得相应的版本运行shsetuptools-0.6c9-py2.4.egg(跟用户权限,若没有可以指定--prefix=~)安装完毕对python2.6可运行下面代码:#!/bin/bash#wgethttp://pypi.python.org/packages/2.6/s/......
  • python 读取文件夹
    importos#返回一个列表['01.xlsx','EE_reg.txt','EEData.txt','ERENR.txt','ER-25.txt']file_names=os.listdir('D:\\yuyu\\test_yuyu\\accessibility_1\\APP_Employer_EE_Enrolment')file=op......