动态格式化tkinter滑块值 Python 2.7
我原以为我想做的事情会很简单,但显然不是这样。
我想用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()