Python GUI 编程:tkinter 初学者入门指南——多行行文本框

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本


在本文中,将介绍如何创建 tkinter 菜单栏、、菜单按钮、选项菜单,向菜单栏添加菜单以及向每个菜单添加菜单项。

当应用程序包含大量功能时,需要使用菜单来组织它们以便于导航。通常,使用菜单对相关的操作进行分组。

要创建菜单,使用如下构造函数。

menu = tk.Menu(master, **options)

菜单

创建一个简单的菜单需要以下几个步骤:

1.创建一个菜单栏 menubar 并将其分配给窗口:

menubar = tk.Menu(root)

root.config(menu=menubar)

每个顶级窗口只能有一个菜单栏。

2.在菜单栏 menubar 创建一个菜单 file_menu

file_menu = Menu(menubar)

3.向菜单 file_menu 中添加菜单项 Exit

file_menu.add_command(label='Exit', command=root.destroy)

单击菜单项时,Python 将关闭窗口。

4.将菜单项 Exit 添加到菜单 file_menu,显示标签为 File

menubar.add_cascade(label="File", menu=file_menu, underline=0)

underline 选项允许创建键盘快捷键。指定快捷键字符的位置。该位置从 0 开始。

在以上示例中,将指定 File 的第一个字符,即您可以使用键盘快捷键 Alt+F

完整示例

import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Menu 菜单演示')
menubar = tk.Menu(root)
root.config(menu=menubar)
file_menu = tk.Menu(menubar)
file_menu.add_command(
    label='Exit',
    command=root.destroy,
    underline=0
    )
menubar.add_cascade(
    label="File",
    menu=file_menu,
    underline=0
    )    
root.mainloop()

在这里插入图片描述
默认情况下,在第一个菜单项之前会添加一条虚线。当单击虚线时,主窗口将从菜单中分离。

在这里插入图片描述
要删除虚线,可以为菜单添加参数 :tearoff = False

file_menu = Menu(menubar, tearoff=False)
在这里插入图片描述
可以继续为菜单项添加子菜单

1.创建一个菜单项:sub_menu

sub_menu = tk.Menu(file_menu, tearoff=0)

2.为菜单项 sub_menu 添加两个子菜单:

sub_menu.add_command(label='关闭当前文件')

sub_menu.add_command(label='关闭所有文件')

3.将菜单项 sub_menu 添加到菜单 file_menu,显示标签为 关闭文件

file_menu.add_cascade(label="关闭文件", menu=sub_menu)

完整示例

import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Menu 菜单演示')
menubar = tk.Menu(root)
root.config(menu=menubar)

file_menu = tk.Menu(menubar, tearoff=False)
file_menu.add_command(label='新建')
file_menu.add_command(label='打开...')

sub_menu = tk.Menu(file_menu, tearoff=0)
sub_menu.add_command(label='关闭当前文件')
sub_menu.add_command(label='关闭所有文件')
file_menu.add_cascade(label="关闭文件", menu=sub_menu)

file_menu.add_separator()
file_menu.add_command(label='退出', command=root.destroy)
menubar.add_cascade(label="文件", menu=file_menu)
menubar.add_cascade(label="编辑")

root.mainloop()

在这里插入图片描述
Tkinter 菜单函数

函数说明
add_command()将菜单项添加到菜单。
add_radiobutton()向菜单添加单选按钮项
add_checkbutton()向菜单添加复选框
add_cascade()将菜单加入菜单栏。
add_separator()在菜单中添加分隔线
add()将指定类型的项目添加到菜单中
index()返回指定菜单项的索引

菜单按钮

Menubutton 菜单按钮是菜单和按钮的组合,单击按钮时,会显示一个包含选项的菜单。

要创建Menubutton 菜单按钮,使用如下构造函数。

menu_button = tk.Menubutton(master, **options)

首先创建菜单按钮:

menubttn = tk.Menubutton(root, text = "程序设计", relief = tk.RAISED)

其次,为菜单按钮创建菜单,添加菜单项(复选、单选、菜单):

menu = tk.Menu(menubttn, tearoff = 0)

menu.add_checkbutton(label = "Python")

menu.add_radiobutton(label = "C++")

menu.add_command(label='打开')

最后,将菜单添加到菜单按钮:

menubttn["menu"] = menu

menubttn.pack(pady=20)

完整示例

import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Menubutton 菜单按钮演示')

menubttn = tk.Menubutton(root, text = "程序设计", relief = tk.RAISED)
 
menu = tk.Menu(menubttn, tearoff = 0)

menu.add_checkbutton(label = "Python")
menu.add_checkbutton(label = "Java")
menu.add_radiobutton(label = "C++")
menu.add_radiobutton(label = "PHP")
menu.add_command(label='打开')
menu.add_command(label='关闭')

menubttn["menu"] = menu
menubttn.pack(pady=20)
root.mainloop()

以上示例中,为菜单按钮的菜单添加了两个复选按钮、两个单选按钮、两个菜单项。两个单选按钮不能同时选中。
在这里插入图片描述

选项菜单

选项菜单 OptionMenu 小组件基本上是一个下拉列表或弹出菜单,在下拉菜单中提供一组预定义的选项,并允许用户一次选择一个选项。。

要创建选项菜单,请使用构造函数:

optionmenu = tk.OptionMenu(master, variable, value, *values, **kwargs)

完整示例

import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('OptionMenu 选项菜单演示')

option_var = tk.StringVar(root)
languages = ['Python', 'JavaScript', 'Java', 'C#', 'C++']
def option_changed(*args):
        output_label['text'] = f'你选择了:{option_var.get()}'

option_var.set('Language')

label = tk.Label(root,  text='请选择你喜欢的编程语言:')
label.pack()

option_menu = tk.OptionMenu(root, option_var, *languages, command=option_changed)
option_menu.pack()

output_label = tk.Label(root,  text='')
output_label.pack()
root.mainloop()

option_var:表示选项菜单选择的值;

*languages:表示选项菜单存储所有选项的列表的名称;

get():获取并返回 OptionMenu 中当前选定的选项;

set():设置 OptionMenu 中当前的选项;

在这里插入图片描述
在这里插入图片描述

动态更新 OptionMenu 选项

如果需要在运行时修改 OptionMenu 内容,比如需要删除旧选项并插入新选项。可以使用 add_command()delete() 方法。

import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('OptionMenu 选项菜单演示')

option_var = tk.StringVar(root)
languages = ('Python', 'JavaScript', 'Java', 'C#', 'C++')
def option_changed(*args):
    output_label['text'] = f'你选择了:{option_var.get()}'
def delete(*args):
    option_menu['menu'].delete(0, 'end')
def new(*args):
    new_options = ["New option 1", "New option 2"]
    for option in new_options:
        option_menu['menu'].add_command(label=option, command=tk._setit(option_var, option))

option_var.set('Language')

label = tk.Label(root,  text='请选择你喜欢的编程语言:')
label.pack()

option_menu = tk.OptionMenu(root, option_var, *languages, command=option_changed)
option_menu.pack()

output_label = tk.Label(root,  text='')
output_label.pack()

button = tk.Button(root,  text='删除', command=delete)
button.pack()

button = tk.Button(root,  text='添加', command=new)
button.pack()

root.mainloop()

在这里插入图片描述
在这里插入图片描述

OptionMenu 样式设置

OptionMenu 不能直接设置宽度、高度参数,需要使用 config 方法。

option_menu.config(width=10)

option_menu.config(height=2)

OptionMenu 级联菜单

import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('OptionMenu 选项菜单演示')

primary = tk.StringVar()
secondary = tk.StringVar() 

def menu_changed(*args):
   if primary.get() == "山东省":
        secondary.set("济南")
        secondary_options = ["济南", "青岛", "淄博"]
   else: 
        secondary.set("南京")
        secondary_options = ["南京", "苏州"]        

   secondary_menu["menu"].delete(0, "end")

   for option in secondary_options:
       secondary_menu["menu"].add_command(label=option, command=tk._setit(secondary, option)) 

primary_opts = ["山东省", "江苏省"]
primary_menu = tk.OptionMenu(root, primary, *primary_opts, command=menu_changed)
primary.set("省份")
primary_menu.config(width=15)
primary_menu.pack()
secondary_menu = tk.OptionMenu(root, secondary, "")
secondary.set("城市")
secondary_menu.config(width=15)
secondary_menu.pack()

root.mainloop()

在这里插入图片描述
OptionMenu 的唯一缺点是它无法处理大数据。由于下拉列表长度受限于屏幕大小,因此,在大量数据的情况下,可以使用 Listbox,因为它提供了滚动功能。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信息科技云课堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值