Python GUI 编程:tkinter 初学者入门指南——Ttk 组合框 Combobox

ops/2024/12/20 14:29:46/

在本文中,将介绍如何创建一个 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() 方法绑定 <<ComboboxSelected>> 事件。

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.ppmy.cn/ops/143512.html

相关文章

MacPorts 安装 Tengine

创建 Portfile 以下是我参考 nginx 调整后的 Portfile&#xff0c;如需安装指定版本&#xff0c;除了修改版本号之外还需要修改 checksums 里的 sha256 sha256 值需下载 Tengine 源码文件&#xff08;tar.gz&#xff09;进行计算 模块的调整在最后的 configure.args-append …

美国DARPA电子复兴计划总结

DARPA电子复兴计划 DARPA即美国国防高级研究计划局&#xff0c;成立于1958年2月7日&#xff0c;最初叫高级研究计划局&#xff08;ARPA&#xff09;&#xff0c;1972年3月更名为DARPA&#xff0c;1993年2月又改回ARPA&#xff0c;1996年3月再次恢复为DARPA. 其使命是“为国家安…

C语言编程1.26判断八进制数字字符

C语言标准函数库中包括 isdigit 函数&#xff0c;用于判断十进制数字字符。我们来编写一个判断八进制数字字符的函数。 函数接口定义&#xff1a; int IsOctDigit(char x);说明&#xff1a;参数 x 是字符的 ASCII 码。若 x 是八进制数字字符的 ASCII 码&#xff0c;则函数值为…

【Maven】基础(一)

【Maven】基础一 1. 虽然工作有段时间了&#xff0c;但是深感maven了解的不深入&#xff0c;所以这次开始深入的学习。 课程地址: https://www.bilibili.com/video/BV1JN411G7gX?spm_id_from333.788.player.switch&vd_source240d9002f7c7e3da63cd9a975639409a&p2 1.…

Mybatis——(2)

2.2 Mybatis 工具类&#xff08;了解&#xff09; 为了简化MyBatis的开发&#xff0c;可将MyBatis进一步封装。 import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apa…

laya游戏引擎中打包之后图片模糊

如下图正常运行没问题&#xff0c;打包之后却模糊 纹理类型中的默认类型都是精灵纹理&#xff0c;改为默认值即可。注意&#xff1a;要点击“应用”才可有效。精灵纹理类型会对图片进行渲染处理&#xff0c;而默认值 平面类型不会处理图片。

算法-字典树

模板 class TrieNode {boolean isEnd; // 是否为单词末尾TrieNode[] next; // 孩子节点数组public TrieNode() {this.isEnd false;this.next new TrieNode[26];} }class Trie {TrieNode root; // 虚拟头节点public Trie() {root new TrieNode();}public void insert(String…

PaddlePaddle推理模型利用Paddle2ONNX转换成onnx模型

训练paddleocr模型&#xff0c;可以按照如下教程或者直接百度其他的 PaddleOCR训练自己的数据集&#xff08;中英文&#xff09;&#xff08;全套&#xff09;和C#部署&#xff08;半套&#xff09;_c# paddleocr-CSDN博客 将训练后的模型转换成推理模型 -c后面是你配置的de…