Python Tkinter自定义自动完成组合框如何通过self调用变量对应属性方法
你代码的核心问题是遍历kwargs时拿到的key是字符串类型,无法直接作为方法调用,需要先从当前实例中取出对应名称的方法再执行,下面提供两种可选解决方案:
方案1:保留自定义属性方法,修正调用逻辑
只需要修改AutoCompleteBox类中遍历kwargs的代码:
# 原错误写法 for key, value in kwargs.items(): key(value) # 修正后写法 for key, value in kwargs.items(): getattr(self, key)(value)
getattr会从self实例上查找和key同名的属性/方法,拿到方法后再传入参数执行即可触发对应的配置逻辑。
方案2:更简化的原生兼容写法
不需要自定义height、width这类属性方法,原生ttk.Combobox的初始化方法本身就支持接收所有配置参数,直接把kwargs传递给父类初始化即可,完整可运行代码如下:
from tkinter import * from tkinter import ttk class App(Tk): def __init__(self): Tk.__init__(self) # 可以直接传所有原生ttk.Combobox支持的参数,包括尺寸、事件回调等 self.CBBox = AutoCompleteBox(self, height=3, width=20, postcommand=lambda: print("下拉框触发")) self.CBBox.pack() class AutoCompleteBox(ttk.Combobox): def __init__(self, parent, **kwargs): # 直接把所有参数传给父类初始化,原生逻辑会自动处理所有配置 ttk.Combobox.__init__(self, parent, **kwargs) my_app = App() my_app.mainloop()
这种写法可以直接兼容所有原生ttk.Combobox支持的关键字参数,不需要逐个手动写属性设置方法。
内容的提问来源于stack exchange,提问作者jh123
相关产品推荐
相关产品推荐

