动态格式化tkinter滑块值 Python 2.7

1 投票
1 回答
2095 浏览
提问于 2025-04-18 16:16

我原以为我想做的事情会很简单,但显然不是这样。

我想用tkinter的滑块来控制用户可以输入的范围和数值。

具体来说,我想输入一个以秒为单位的时间值,并以分钟:秒的格式显示出来,这样大家都能明白,比如330秒等于5:30。

因为这种格式不是滑块的标准显示方式,所以我想在滑块旁边显示mm:ss格式的时间。

在我的示例代码中,我能看到滑块的数值在变化,但到目前为止,我还不能让mm:ss的显示随着滑块的移动而变化(我必须点击一个按钮才能更新)。我希望最终的结果尽可能简单明了,所以我需要mm:ss的显示能够随着滑块的滑动而动态变化。

到目前为止,我似乎已经用尽了所有能找到的在线示例,但没有一个能做到我想要的(需要额外的按钮来转换)。

我很确定当我找到解决办法时会觉得自己很傻,但现在我真的很头疼,搞不清楚该怎么做。

有没有人能分享一个这样的示例呢?

1 个回答

3

这个缩放控件有一个叫做 command 的属性,你可以用它来设置一个函数,每当数值变化时就会调用这个函数。这个函数可以把数值格式化成你想要的样子。

import Tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)

        self.scale = tk.Scale(self, orient="horizontal", 
                              from_=0, to=600, 
                              showvalue=False,
                              command=self._on_scale)
        self.scale_label = tk.Label(self, text="")
        self.scale.pack(side="top", fill="x")
        self.scale_label.pack(side="top")

    def _on_scale(self, value):
        value = int(value)
        minutes = value/60
        seconds = value%60
        self.scale_label.configure(text="%2.2d:%2.2d" % (minutes, seconds))

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True);
    root.mainloop()

撰写回答