【Python GUI 编程】tkinter :Ttk 组合框 Combobox

news/2024/12/21 10:59:32/文章来源:https://www.cnblogs.com/o-O-oO/p/18620532

在本文中,将介绍如何创建一个 tkinter Combobox 组合框小部件,该小部件允许用户从一组值中选择一个值。

Combobox 组合框小部件是新增的 Ttk 主题小部件,是 Entry 文本框和 Listbox 列表框的组合。除了允许在一组值中选择一个值外,它还允许输入自定义值。

创建组合框

要创建组合框小部件,使用以下构造函数。

current_var = tk.StringVar()
combobox = ttk.Combobox(master, textvariable=current_var)

获取组合框选定的值

textvariable 参数将变量链接到 current_var。要获取当前组合框选定的值,可以使用 current_var 变量。

current_value = current_var.get()

或者,直接使用 combobox 对象的 get() 方法:

current_value = combobox.get()

设置组合框的值

要设置当前值,可以使用 current_var 变量或 combobox 对象的 set() 方法。

current_value.set(new_value)combobox.set(new_value)

默认情况下,可以直接在组合框中输入值。如果不允许直接输入值,可以将组合框设置为只读readonly 否则,设置为normal。

combobox['state'] = 'readonly'

批量设置组合框的值

可以为组合框分配一个列表或元组,进行批量赋值。

combobox['values'] = ('value1', 'value2', 'value3')`

绑定事件

当组合框的值发生更改时,可以触发事件,使用bind() 方法绑定<> 事件。

combobox.bind('<<ComboboxSelected>>', callback)

Combobox 组合框示例

import tkinter as tk
from tkinter.messagebox import showinfo
from tkinter import ttk
from calendar import month_name
from datetime import datetime
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Combobox 组合框演示')
def year_changed(event):showinfo(title='结果', message=f'你选择了 {selected_year.get()}!')
def month_changed(event):showinfo(title='结果', message=f'你选择了 {selected_month.get()}!')label = tk.Label(text="请选择年份:")
label.pack(fill=tk.X, padx=5, pady=5)
selected_year = tk.StringVar()
combobox1 = ttk.Combobox(root, textvariable=selected_year)
combobox1['values'] = [2023, 2024, 2025]
combobox1['state'] = 'readonly'
combobox1.pack(padx=5, pady=5)
combobox1.bind('<<ComboboxSelected>>', year_changed)label = tk.Label(text="请选择月份:")
label.pack(fill=tk.X, padx=5, pady=5)
selected_month = tk.StringVar()
combobox2 = ttk.Combobox(root, textvariable=selected_month)
combobox2['values'] = [month_name[m][0:3] for m in range(1, 13)]
combobox2['state'] = 'readonly'
combobox2.pack(padx=5, pady=5)
combobox2.bind('<<ComboboxSelected>>', month_changed)# 设置当前月份为组合框的当前值
current_month = datetime.now().strftime('%b')
combobox2.set(current_month)
root.mainloop()

组合框联动

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Combobox 组合框演示')label = tk.Label(text="请选择省份:")
label.pack(fill=tk.X, padx=5, pady=5)
combobox1 = ttk.Combobox(root)
combobox1['values'] = ["山东省", "江苏省", "吉林省"]
combobox1['state'] = 'readonly'
combobox1.pack(padx=5, pady=5)label = tk.Label(text="请选择城市:")
label.pack(fill=tk.X, padx=5, pady=5)
combobox2 = ttk.Combobox(root)
combobox2['state'] = 'readonly'
combobox2.pack(padx=5, pady=5)# 联动响应
region = {'山东省': ["济南", "青岛", "淄博"],'江苏省': ["南京", "苏州" ],'吉林省': ["长春", "吉林"]
}
def handle(event):selected = combobox1.get()combobox2['values'] = region[selected]combobox1.bind('<<ComboboxSelected>>', handle)  
root.mainloop()

原创 信息技术资源 信息科技云课堂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/856265.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python GUI 编程】tkinter:Ttk 选项卡 Notebook

在本文中,将介绍如何使用 Tkinter Notebook 小部件创建选项卡。 Notebook 是由 Tkinter Ttk 模块引入的强大小部件。允许开发者创建包含多个选项卡的界面,每个选项卡可以包含不同的内容。 创建 Notebook 小部件,请使用如下构造函数: notebook = ttk.Notebook(master,**kw)添…

在虚拟机里执行protoc报非法指令( Illegal instruction)

问题 在x86虚拟机里编译perfetto的时候遇到执行protoc报非法指令,但是在host上编译的时候并没有这样的问题 原因 虽然虚拟机和宿主机都是同一个指令集架构,但是CPU在一些特殊指令上的支持还是有区别的,如果Host可以,但是虚拟机上不行,可能就是虚拟机CPU不支持某些特性,导…

中考阅读理解深入逻辑分析-001 A Dine to Remember 难忘的一餐

中考阅读理解深入逻辑分析-001 A Dine to Remember 难忘的一餐 文章正文 It was a few years ago. A friend had sent me a restaurant gift card for Christmas and I had picked a sunny Sunday afternoon to use it. It felt good taking my two grown sons and daughter to…

HTTP协议及安全防范

HTTP(Hypertext Transfer Protocol)超文本传输协议是一个用于 Web 应用程序通信的应用层协议。它是一种客户端-服务器协议,客户端通过发送请求到服务器来获取资源,服务器则根据请求返回响应。HTTP 协议通常使用 TCP作为传输协议,但也可以使用其它传输协议 由于图片解析问题…

LDA主题模型——原理和模型(二)

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 主题模型是用于发现文档集合中隐含主题的统计模型,主题可以定义为“文档集中具有相同词境的词的集合模式”。主题模型克服了传统信息检索中文档相似度计算方…

LDA主题模型——贝叶斯分布与其共轭(一)

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 贝叶斯分布理论是统计推断的重要分支,其核心思想是利用贝叶斯定理,将先验知识与新观测数据结合,从而动态更新对未知参数的认识。这一理论框架以概率为基础…

pytest+requests+allure测试框架中,如何实现用例的数据驱动取出来的数据同步到fixture中,作为参数使用

1、在 pytest 中,如果你有多个数据驱动的 fixture 和测试用例,并希望确保它们的数据同步传递(即每个 fixture 和测试用例的数据对是一一对应的),你可以使用 pytest.mark.parametrize 来参数化测试函数和 fixture。为了确保 fixture 和测试函数中的数据同步传递,可以将它们…

webman: 使用模板引擎twig

一,安装 $ composer require twig/twig 二,配置 config/view.php <?php /*** This file is part of webman.** Licensed under The MIT License* For full copyright and license information, please see the MIT-LICENSE.txt* Redistributions of files must retain th…

读图数据库实战笔记09性能与反模式

性能与反模式1. 熵 1.1. 熵是物理学上的一个术语,本质上是一个系统“内在的混乱程度”​ 1.2. 是我们的敌人 2. 执行缓慢的遍历 2.1. 和关系数据库一样,图数据库对于执行缓慢的操作并不陌生 2.2. 图也有帮助诊断问题的工具2.2.1. 解释一个遍历会做什么2.2.2. 分析一个遍历做了…

广义少镜头分割的视觉提示:一种多尺度方法

广义少镜头分割的视觉提示:一种多尺度方法 5.5.1 多尺度方法概述 基于注意力的变换器模型的出现,由于其优越的泛化和传递特性,在各种任务中得到了广泛的应用。最近的研究表明,当得到适当的提示时,这些模型对于少镜头推理来说是极好的。然而,对于语义分割等密集预测任务,…

专著推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》

专著推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该书强力解析AI芯片的核心技术开发,内容翔实、知识点新颖…