You need to enable JavaScript to run this app. Tkinter联动绑定的Combobox如何正确获取下拉框选中值
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter联动绑定的Combobox如何正确获取下拉框选中值

问题根本原因

你遇到的Box_2.get()始终返回空的问题,核心是Python作用域规则导致的变量指向错误:

  • 你在全局作用域先实例化了一次Box_2(空选项的版本),把它放到了界面网格上
  • 但在写Select_Mat响应函数的时候,你又在函数内部写了Box_2 = Combobox(...) 这行代码——Python 碰到函数内部对变量的赋值操作时,会默认把这个变量当成函数局部作用域的变量,完全不会去修改函数外面全局定义的那个Box_2对象
  • 最后实际出现在界面上、被你切换材料时更新的那个颜色下拉框,只是函数内部的临时局部变量,函数执行完引用就被销毁了;而Print_Colour函数里调用Box_2.get(),取的还是最开始那个从来没被更新过选项、也从没被选过值的旧全局Box_2,自然永远返回空。
    另外还有个隐藏问题:你每次响应材料选择就重新创建Combobox,其实旧的那个空下拉框根本没被销毁,只是被新的控件盖住了,长期运行会出现界面控件堆叠、布局错位的问题。
正确修复思路
  • 移除Select_Mat函数里所有重新实例化Combobox的代码,这种反复创建销毁控件的写法会带来额外的GUI资源开销,还容易出现布局堆叠的问题;就算当初给函数内的Box_2加了global声明修正作用域问题,这种实现逻辑也属于冗余设计
  • 对已有的Box_2直接通过Box_2['values'] = 新选项列表的方式更新可选值
  • 每次更新完选项后,可以调用Box_2.set('')清空之前残留的选中值,避免出现“选中的选项不在当前可选列表内”的异常状态
修复后可直接运行的代码
from tkinter import *
from tkinter.ttk import Combobox

win = Tk()
win.title("Window")

Material_List = ["Material1","Material2"]
Colour_List = ["Green","Blue","Black","White"]

def Print_Colour():     # 打印当前选中的颜色
    print(Box_2.get())

def Select_Mat(eventObject):  # 绑定材料选择事件,动态更新颜色选项
    Material_Choice = Box_1.get()
    if Material_Choice == Material_List[0]:
        # 直接修改现有Box_2的选项,不新建控件
        Box_2['values'] = [Colour_List[0], Colour_List[1]]
        Box_2.set('')  # 清空旧的选中值
    elif Material_Choice == Material_List[1]:
        Box_2['values'] = [Colour_List[2], Colour_List[3]]
        Box_2.set('')

Box_1 = Combobox(win, values=[Material_List[0], Material_List[1]], width=17, state='readonly')
Box_1.grid(row=1, column=1, columnspan=2)

Box_2 = Combobox(win, width=17, state='readonly')
Box_2.grid(row=1, column=4, columnspan=2)

Box_1.bind("<<ComboboxSelected>>", Select_Mat)

Print_Button = Button(win, text="Print Colour", width=16, command=Print_Colour) 
Print_Button.grid(row=2, column=1, columnspan=2)

win.mainloop()

内容的提问来源于stack exchange,提问作者Fabian Pirrwitz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 12:45:04