动态重新格式化tkinter比例值python 2.7

时间:2014-08-06 15:39:59

标签: python tkinter

我认为我想做的事情很简单,但显然不是。

我想要做的是使用tkinter比例来控制用户可以输入的范围和值。

在我的情况下,我想以秒为单位输入时间值,并以分钟:秒格式显示,以便任何人都可以理解,比如330秒== 5:30。

因为这不是缩放小部件的标准格式,我想要做的是以缩放小部件旁边的mm:ss格式显示时间。

在我的示例代码中,我可以看到比例值发生变化,但到目前为止,我无法让mm:ss显示随着比例移动而改变(我必须单击一个按钮才能使其更新)。 因为我希望最终结果尽可能地白痴,我需要使用mm:ss显示来动态更改滑块。

在这个阶段,我似乎已经耗尽了我能找到的所有在线示例,并且没有一个看起来像我想要的那样(转换需要额外的按钮按下)。

我很确定当我发现如何做到这一点时我会感到愚蠢,但是现在我的脑袋因为试图解决这个问题而感到痛苦。

有没有人有他们可以分享的这种行为的例子?

1 个答案:

答案 0 :(得分:2)

scale小部件有一个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()