tkinter中StringVar.get()返回空 无法获取Combobox下拉选中值
问题原因排查
print(self.var.get())写在构造方法__init__中,该方法仅在页面框架初始化阶段执行一次,此时用户尚未在UI中操作下拉框选择任何值,StringVar默认初始值为空字符串,因此输出为空。- 未给Combobox绑定选中事件回调,你当前只配置了
postcommand参数,这个参数的作用是下拉框展开前执行的回调,仅用来动态更新下拉选项列表,不会响应用户选中值的操作,因此选中值变化后不会主动触发你要的打印逻辑。
修复方案
你需要给Combobox绑定<<ComboboxSelected>>虚拟事件,在对应的回调方法中执行取值打印逻辑,修改后的代码示例如下:
import tkinter as tk from tkinter import ttk from tkinter import StringVar class Frame(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller self.var = StringVar() self.combobox = ttk.Combobox( self, textvariable=self.var, postcommand=self.update_list_combobox, state="readonly", ) self.combobox.pack() # 绑定选中事件 self.combobox.bind("<<ComboboxSelected>>", self.on_combobox_select) def update_list_combobox(self): _list = self.controller.data.columns.tolist() self.combobox["values"] = _list # 新增选中事件回调方法 def on_combobox_select(self, event): # 两种取值方式都可正常获取选中值 print("StringVar取值:", self.var.get()) print("Combobox直接取值:", self.combobox.get())
内容的提问来源于stack exchange,提问作者WitchKingofAngmar
相关产品推荐
相关产品推荐

