我必须访问tkinter.PanedWindow包含的组件,这样我才能使用方法update()修改ttkbootsatrap.Meter的使用量的值.

在tkinter或ttkbootstrap中有没有类似于Java Swing JPanel.getComponents()的功能?

以下是我的代码片段:

    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.getComponents(): # <- This is where i would implement the function instead of "panel.getComponents()" (which, ofcourse, does not work)
            if isinstance(c, ttk.Meter):
                meter.configure(amountused = value)
                

我来自Java背景,希望这不是一个愚蠢的问题. 提前谢谢您!

推荐答案

panes方法返回由窗格窗口管理的小部件的有序列表.遗憾的是,它返回的是低级TCL对象,而不是Python对象.

幸运的是,有一种相当简单的方法可以将低级对象转换为python对象.较低级别的对象具有一个string属性,其中包含小部件的内部名称,或者您可以对其使用str方法.Python小部件有一个名为nametowidget的方法,该方法可以获取内部名称并将其转换为Python对象.

因此,使用该信息可以循环遍历小部件,如下所示(假设panel表示PanedWindow小部件):

def updateValue(panel, value):
    for obj in panel.panes():
        c = panel.nametowidget(str(obj))
        if isinstance(c, ttk.Meter):
            ...

Python相关问答推荐

有什么方法可以避免使用许多if陈述

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

连接两个具有不同标题的收件箱

滚动和,句号来自Pandas列

Pandas 滚动最接近的价值

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

Polars:用氨纶的其他部分替换氨纶的部分

当独立的网络调用不应该互相阻塞时,'

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

如何在Python中获取`Genericums`超级类型?

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

如何在达到end_time时自动将状态字段从1更改为0

如何使用两个关键函数来排序一个多索引框架?

如何排除prefecture_related中查询集为空的实例?

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

当单元测试失败时,是否有一个惯例会抛出许多类似的错误消息?

如何在Python中将超链接添加到PDF中每个页面的顶部?

SpaCy:Regex模式在基于规则的匹配器中不起作用

如何在SQLAlchemy + Alembic中定义一个"Index()",在基表中的列上

将相应的值从第2列合并到第1列(Pandas )