昨天我正在实现一个ttk进度条,看到了一些我不太理解的代码。
可以使用如下的方法为进度条设置最大值:

progress_bar["maximum"] = max

我预期TTK PrimeStBar对象将使用一个实例变量来跟踪被创建对象的最大值,但是该语法看起来更像:
progres_bar.maximum = max

所以我的问题是,括号里的语法到底发生了什么,术语是什么,我在哪里能读到更多的?当我看Progressbar课程时,我看到的只是
class Progressbar(Widget):
    """Ttk Progressbar widget shows the status of a long-running
    operation. They can operate in two modes: determinate mode shows the
    amount completed relative to the total amount of work to be done, and
    indeterminate mode provides an animated display to let the user know
    that something is happening."""

    def __init__(self, master=None, **kw):
        """Construct a Ttk Progressbar with parent master.

        STANDARD OPTIONS

            class, cursor, style, takefocus

        WIDGET-SPECIFIC OPTIONS

            orient, length, mode, maximum, value, variable, phase
        """
        Widget.__init__(self, master, "ttk::progressbar", kw)

我看到有一个“widget-specific选项”,但是我不理解progress_bar["maximum"] = max如何设置该值,或者如何存储它。

最佳答案

发生的情况是,ttk模块是安装了tk包的tcl解释器的瘦包装器。Tcl/tk没有python类的概念。
在tcl/tk中,设置属性的方法是使用函数调用。例如,为了设置最大属性,你会这样做:

.progress_bar configure -maximum 100

ttk包装非常相似:
progress_bar.configure(maximum=100)

最初的tkinter开发人员只知道一个原因,他们决定实现一个字典接口,允许您使用括号表示法。也许他们觉得更像是蟒蛇?例如:
progress_bar["maximum"] = 100

几乎可以肯定的是,他们没有设置对象的这些属性(例如:progress_bar.maximum = 100)是因为一些tcl/tk小部件属性会与python保留字或标准属性(例如,id)冲突。通过使用词典,他们避免了这种冲突。

关于python - Python ttk对象-不了解特定于窗口小部件的选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30732579/

10-12 21:01