如何在Python Tkinter中访问PanedWindow包含的组件?
获取tkinter PanedWindow子组件并更新ttkbootstrap Meter的解决方案
核心替代方法
tkinter中没有和Java Swing JPanel.getComponents()完全同名的方法,但PanedWindow提供了**panes()**方法,能够返回它所包含的所有子组件列表,作用完全对应你需要的getComponents()。
修改后的代码实现
针对你提供的代码,只需将panel.getComponents()替换为panel.panes(),同时修正变量引用问题(原代码中meter是局部变量,在updateValue中无法访问):
def buildChart(self): chartPanel = tk.PanedWindow(self.parent_window, orient=tk.VERTICAL, borderwidth=0) meter = ttk.Meter( metersize = self.meter_radius, padding = self.padding, amountused = 25, metertype = self.meter_type, subtext = self.subtext, interactive = self.isInteractive, ) meter.pack(expand=True) chartPanel.add(meter) return chartPanel def updateValue(panel, value): for c in panel.panes(): # 使用panes()获取所有子组件 if isinstance(c, ttk.Meter): c.configure(amountused = value) # 用当前遍历的组件实例调用configure
更高效的优化方案
如果不需要遍历多个组件,更推荐直接保存Meter的引用,避免遍历开销:
def buildChart(self): chartPanel = tk.PanedWindow(self.parent_window, orient=tk.VERTICAL, borderwidth=0) # 将meter保存为类实例变量 self.meter = ttk.Meter( metersize = self.meter_radius, padding = self.padding, amountused = 25, metertype = self.meter_type, subtext = self.subtext, interactive = self.isInteractive, ) self.meter.pack(expand=True) chartPanel.add(self.meter) return chartPanel def updateValue(self, value): # 直接操作实例变量,无需遍历组件 self.meter.configure(amountused = value)
内容的提问来源于stack exchange,提问作者Ícaro Aquino
相关产品推荐
相关产品推荐

